MongoDb: добавить элемент в массив, если он не существует

Я использую node.js и Mongo.db(я недавно на Mongo). У меня есть такой документ:

Tag : {
   name: string,
   videoIDs: array
}

Идея заключается в том, что сервер получает JSON, например

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

с этим JSON, он должен найти тег с тем же именем и проверить, есть ли в массиве videoId, если нет, вставьте его в массив.

Как проверить массив и добавить данные?

Ответ 1

Вы можете использовать оператор $addToSet, чтобы проверить существо, прежде чем добавить элемент в массив.

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

В этом примере инструкции обновления mongoDB найдет документ TAG, который соответствует имени == 'sport', а затем проверьте, содержит ли массив идентификаторов видеоизображений '34f54e34c'. Если нет, добавьте его в массив.

Подробное использование $addToSet, пожалуйста, прочитайте здесь.

Ответ 2

Оператор

$addToSet проверяет наличие пустого или существующего массива в документе.

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

Ответ 3

Я не тестировал его, но вы можете попробовать что-то вроде:

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

Если вам нужно: MongoDb в реализации nodeJs, вы можете начать с:

http://jsfiddle.net/1ku0z1a1/