2016-08-16 10 views
10

Używam node.js i Mongo.db (jestem nowo na Mongo). Mam dokument tak:MongoDb: dodaj element do tablicy, jeśli nie istnieje

Tag : { 
    name: string, 
    videoIDs: array 
} 

Chodzi o to, że serwer odbiera JSON jak

JSON: { 
    name: "sport", 
    videoId: "34f54e34c" 
} 

z tym JSON, to musi znaleźć tag o tej samej nazwie i sprawdzić, czy w tablica ma videoId, jeśli nie, włóż ją do tablicy.

Jak mogę sprawdzić tablicę i dołączyć dane?

+0

'w tablicy ma videoId' Która tablica mówisz? – Shrabanee

Odpowiedz

25

Możesz użyć operatora $addToSet, aby sprawdzić istniejący przed dodaniem element do tablicy.

db.tags.update(
    {name: 'sport'}, 
    {$addToSet: { videoIDs: "34f54e34c" } } 
); 

w tej aktualizacji przykład oświadczenie, MongoDB znajdzie dokument TAG, który odpowiada nazwie == „sport”, a następnie sprawdzić, czy tablica videoIDs zawiera „34f54e34c”. Jeśli nie, dołącz ją do tablicy.

Szczegóły użycia $ addToSet przeczytaj here.

+0

@albert, tak, możesz wstawić jeden element. "videoIDs" to tablica i chcesz wstawić do niej ciąg "34f54e34c", jeśli nie istnieje, prawda? – yellowB

+0

Działa, dodaje nowe identyfikatory, jeśli nie ma, unikając duplikatów. – albert

+2

Co się stanie, jeśli pole "identyfikatory wideo" nie istnieje, aby rozpocząć? –

1

nie testowałem, ale można spróbować coś takiego:

yourDb.find({ name: "sport", 
       videoIDs: { $in: ["34f54e34c"] } }) 
     .update({$addToSet: { videoIDs: "34f54e34c" }}); 

Jeśli potrzebujesz jak: MongoDB w realizacji nodeJs, można zacząć:

http://jsfiddle.net/1ku0z1a1/

2

$ Sprawdzanie operatora addToSet dla pustej lub istniejącej tablicy w dokumencie.

db.col_name.update({name :"name_for_match"},{$addToSet : { videoId : "video_id_value"}})