MongoDb:如果不存在,则将元素添加到数组中

alb*_*ert 34 mongodb

我正在使用node.js和Mongo.db(我是Mongo上的新人).我有一个这样的文件:

Tag : {
   name: string,
   videoIDs: array
}
Run Code Online (Sandbox Code Playgroud)

这个想法是,服务器收到类似的JSON

JSON: { 
    name: "sport",
    videoId: "34f54e34c"
}
Run Code Online (Sandbox Code Playgroud)

使用此JSON,它必须找到具有相同名称的标记,并检查它是否具有数组videoId,如果没有,则将其插入到数组中.

如何检查数组并附加数据?

yel*_*owB 76

$addToSet在将元素追加到数组之前,您可以使用运算符来检查是否存在.

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

在此更新语句示例中,mongoDB将找到匹配的TAG文档name == sport,然后检查该videoIDs数组是否包含34f54e34c.如果没有,请将其附加到数组中.

详细用法$addToSet在这里阅读.

  • 如果字段'videoIDs'不存在,该怎么办? (2认同)

小智 7

$addToSet运算符检查文档中是否存在空数组或现有数组。

 db.col_name.update({name :"name_for_match"},{$addToSet :  { videoId : "video_id_value"}})
Run Code Online (Sandbox Code Playgroud)


Mar*_*ini 5

我没有测试过,但您可以尝试以下操作:

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

如果你需要如何:在 nodeJs 实现中的 MongoDb,你可以从:

http://jsfiddle.net/1ku0z1a1/