我在这个主题上搜索了很多,但我完全迷失了。 这是我的问题(我正在使用带有mongojs的node.js):
我想要这样的文件:
{
"_id" : ObjectId("50ce2f7f98fa09b20d000001"),
"beginTime" : 1355689855016,
"tags" : {
"primary": [ 29, 12, 16],
"secondary": [6, 8, 9]
},
"user" : "50bdddc601de4681d666835f"
}
但是,如果我尝试在“主要”下推送新标签(请注意,此字段来自变量),如此
tags = {};
tags[request.body.relevance] = request.body.tag;
return db.activities.update({
'_id': db.ObjectId(request.body.activity),
'user': request.session.user.id
}, {
$push: {
tags: tags
}
});
然后我得到
{ "_id" : ObjectId("50ce2f7f98fa09b20d000001"), "beginTime" : 1355689855016, "tags" : [ { "primary" : 29 }, { "primary" : "24" }, { "primary" : "1" } ], "user" : "50bdddc601de4681d666835f" }
我尝试了许多其他变体,包括嵌套$ push(女巫将其转换为字段o.o)。无论如何,我总是失败。此时我真的饿了T_T
请帮帮我。感谢。
答案 0 :(得分:1)
$push
运算符的值必须是您想要推送到的数组字段,而不是父元素。
请改为尝试:
...
return db.activities.update({
'_id': db.ObjectId(request.body.activity),
'user': request.session.user.id
}, {
$push: {
'tags.primary': tags.primary,
'tags.secondary': tags.secondary
}
});
<强>更新强>
要动态执行此操作,您需要执行以下操作:
...
var push = {};
push['tags.' + request.body.relevance] = request.body.tag;
return db.activities.update({
'_id': db.ObjectId(request.body.activity),
'user': request.session.user.id
}, {
$push: push
});