【发布时间】:2014-07-28 06:35:51
【问题描述】:
我遇到了需要动态更新子文档中字段值的情况。该字段可能已经存在,也可能不存在。如果它不存在,我希望 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 insert into subdocument - dynamic fieldname
提前感谢您的帮助。
【问题讨论】:
-
不,这不是重复的。同样的问题,不同的解决方案。你甚至读过这篇文章吗?愚蠢的看门人。
-
不必粗鲁。解决方案有何根本不同?这与以编程方式构建
$set对象的方法相同。 -
因为它不起作用。另一个不同问题中说明的解决方案会引发错误。我在原始问题中指出。当我将
$set运算符移出placeholder对象时,我最终得到了所需的解决方案,该解决方案有效。而且,是的,这里有必要直言不讳。有太多人在真正应该花时间仔细阅读问题时,通过捐赠他们的清洁服务来获得甜蜜,甜蜜的失败者积分。