【问题标题】:mongojs: pushing elements into fields of arraysmongojs:将元素推入数组字段
【发布时间】:2013-05-15 23:19:20
【问题描述】:

我在这个话题上搜索了很多,但我完全迷路了。 这是我的问题(我将 node.js 与 mongojs 一起使用):

我想要这样的文件:

{ 
    "_id" : ObjectId("50ce2f7f98fa09b20d000001"), 
    "beginTime" : 1355689855016, 
    "tags" : {
        "primary": [ 29, 12, 16], 
        "secondary": [6, 8, 9]
    },
    "user" : "50bdddc601de4681d666835f"
}

但是如果我尝试在“primary”下推送新标签(注意这个字段来自变量),就像这样

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(witch 将其转换为字段 o.o)。无论如何,我总是失败。也是在这一点上我真的很饿T_T

请帮助我。谢谢。

【问题讨论】:

  • 这对我来说是正确的。你是如何查询文件的? Mongo 将您的数组分开以使它们可搜索。
  • 对不起,“您如何查询文档”是什么意思? (我忘记提到的数据是什么?)

标签: javascript mongodb mongojs


【解决方案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
});

【讨论】:

  • 问题在于“主要”和“次要”存储在变量中(可以具有任何值):这就是问题的来源。考虑到标签属性被存储到变量中,您能否告诉我如何使用您的解决方案?
  • @user1662546 好的,我用我假设你正在寻找的内容更新了结果。
猜你喜欢
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
  • 2014-12-26
  • 2022-01-25
  • 1970-01-01
相关资源
最近更新 更多