我遇到了需要动态更新子文档中字段值的情况。该字段可能存在或可能不存在。如果它不存在,我希望mongo创建它。
这是在我的Teams
收藏夹中找到的示例文档,用于存储任何给定团队的成员:
{
_id : ObjectId('JKS78678923SDFD678'),
name : "Bob Lawblaw",
status : "admin",
options : {
one : "One",
two : "Two"
}
}
这是我正在使用的查询(我使用mongojs作为我的mongo客户端)来尝试更新(或创建)options
子文档中的值:
var projectID = 'JKS78678923SDFD678';
var key = 'Three';
var value = 'Three';
Teams.findAndModify({
query: {
projectID:mongojs.ObjectId(projectID)
},
update: {
$set : { options[key] : value }
},
upsert: true,
multi: false,
new: true
},
function(error, result, lastErrorObject){
console.log(result);
});
但是我无法“提升”价值。
我也找到了类似的问题,但是该方法也不起作用:Nodejs Mongo插入子文档-动态字段名
在此先感谢您的帮助。
想通了。
本质上,您需要在运行查询之前为要更新的子文档构造一个“占位符”对象,如下所示:
var projectID = 'JKS78678923SDFD678';
var key = 'Three';
var value = 'Three';
var placeholder = {};
placeholder['options.' + key] = value;
Teams.findAndModify({
query: {
projectID:mongojs.ObjectId(projectID)
},
update: {
$set : placeholder
},
upsert: true,
multi: false,
new: true
},
function(error, result, lastErrorObject){
console.log(result);
});
这将更新任何已经存在的字段,并创建一个不存在的字段/值对。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句