如果我有一个doc,其中包含一个表示一天计数的项目的数组,可能是这样的:
{ data : [ {'20141102' : 2 },{'20141103' : 4 } ] }
当我做一个更新,我有一个字符串 '20141103' 然后一个 '20141104' 我想要包含数组条目或添加一个新的数组条目 . 这是否可以通过更新?
'20141103'
'20141104'
是的,这是可行的 . 我试过这样的:(在mongo shell上运行;客户端和服务器都是V2.6.4)
function tryAndFine(coll, key, value) { var entry = {}; entry[key] = value; var parent = 'data'; var prefix = parent + '.'; function incrementOnly() { var criteria = {}; criteria[prefix + key] = {$exists : true}; var update = {}; update[prefix + "$." + key] = value; var result = coll.update(criteria, {$inc : update}); // if increment fails, try to add a new one if (result.nModified == 0) { addNewElement(); } } function addNewElement() { var criteria = {}; criteria[prefix + key] = {$exists : false}; var update = {}; update[parent] = entry; var result = coll.update(criteria, {$push : update}, {upsert : true}); // if exists, try to increment the count if (result.upserted == 0 && result.nModified == 0) { incrementOnly(); } } // run entry incrementOnly(); } // test var c = db.c; c.drop(); tryAndFine(c, '20141103', 1); tryAndFine(c, '20141103', 1); tryAndFine(c, '20141104', 1); tryAndFine(c, '20141105', 1); tryAndFine(c, '20141104', 1); // output { "_id" : ObjectId("54577e1a3502852bd4ad2395"), "data" : [ { "20141103" : 2 }, { "20141104" : 2 }, { "20141105" : 1 } ] }
1 回答
是的,这是可行的 . 我试过这样的:
(在mongo shell上运行;客户端和服务器都是V2.6.4)