Mongodb upsert字段在文档中

时间:2015-07-03 11:19:06

标签: mongodb mongodb-query

我有一份以下表格的文件:

{ 
    "_id" : <id of document>, 
    "inventory" : [
        {
            "entity_id" : "<id>", 
            "ad_type" : "ADTYPE"
        }
    ]
}

我不确定mongo中是否可以这样做但是我正在尝试在上面的文档中构建一个upsert查询,如果库存不存在我会插入一个空数组,如果存在则推送到数组中库存有一个或多个元素。

我尝试使用findAndModify功能,但我认为这不会起作用。

2 个答案:

答案 0 :(得分:1)

db.collection.find({"_id":"value"}).forEach(
  function(doc){
    if(doc.hasOwnProperty('inventory'))
     {
       db.collection.update({"_id":doc._id},
       {"$push":{"inventory": "new value"}});
     }
   else
    {
       db.collection.update({"_id":doc._id},
       {"$set":{"inventory": new Array() }});
    }
  });

答案 1 :(得分:0)

“collection”是数组,“subcollection”是对象。 该脚本将新字段“rank”添加到索引为1的数组元素。 如果该字段不存在,则脚本将创建“rank”并设置值,如果该字段存在脚本更新值。

db.userCollection.update(
   { "_id": ObjectId("5a1e7aefd1928362e53c5c48"), 
     $and: [ { "collection.1.subcollection.id": "1234" }, 
     		 { "collection.1.rank": {"$ne": -1 }} 
     		] 
   },
   { $set: { "collection.1.rank": "5" } 
   }
)