mongojs:将元素推入数组字段

时间:2012-12-16 20:57:01

标签: javascript mongodb mongojs

我在这个主题上搜索了很多,但我完全迷失了。 这是我的问题(我正在使用带有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

请帮帮我。感谢。

1 个答案:

答案 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
});