2016-08-16 112 views
10

我正在使用node.js和Mongo.db(我是新近在Mongo中的)。我有一個這樣的文件:MongoDb:將元素添加到數組(如果不存在)

Tag : { 
    name: string, 
    videoIDs: array 
} 

的想法是,服務器接收到的JSON像

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

與此JSON,它必須找到具有相同名稱的標籤,並在檢查數組它具有videoId,如果沒有,則將其插入到數組中。

如何檢查數組並追加數據?

+0

'在陣列中它有videoId'你正在談論哪個數組? – Shrabanee

回答

25

您可以使用$addToSet運算符在將元素附加到數組之前檢查存在。

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

在這個update語句例如,MongoDB的會發現它匹配名稱==「運動」的標籤文檔,然後檢查videoIDs數組中是否包含「34f54e34c」。如果沒有,請將其附加到數組中。

$ addToSet的詳細用法請閱讀here

+0

@albert,是的,你可以插入一個元素。 「videoIDs」是一個數組,如果不存在,你想要插入字符串「34f54e34c」,對吧? – yellowB

+0

它的工作原理,它添加新的ID如果沒有,避免重複 – albert

+2

如果字段'videoIDs'不存在以開始? –

1

我沒有測試它,但你可以嘗試這樣的:

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

如果你需要如何:MongoDB的在執行的NodeJS,你可以這樣開始:

http://jsfiddle.net/1ku0z1a1/

2

$ addToSet運算符檢查文檔中的空或現有數組。

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