相关疑难解决方法(0)

在对数组字段执行更新时,无法使用字符串字段名[$]附加到数组

rowsI我正在尝试对记录数组中的每个字段执行mongodb更新.

示例架构如下:

{
    "_id" : ObjectId("508710f16dc636ec07000022"),
    "summary" : "",
    "uid" : "ABCDEF",
    "username" : "bigcheese",
    "name" : "Name of this document",
    "status_id" : 0,
    "rows" : [
        {
            "score" : 12,
            "status_id" : 0,
            "uid" : 1
        },
        {
            "score" : 51,
            "status_id" : 0,
            "uid" : 2
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经能够执行这样的单个更新:

db.mycollection.update({"uid":"ABCDEF","rows.uid":1}, {$set:{"rows.$.status_id":1}},false,false)
Run Code Online (Sandbox Code Playgroud)

但是,我正在努力如何执行更新,将所有数组记录更新status_id为1(例如).

以下是我想象它应该如何工作:

db.mycollection.update({"uid":"ABCDEF"}, {$set:{"rows.$.status_id":1}},false,true)
Run Code Online (Sandbox Code Playgroud)

但是我得到错误:

无法使用字符串字段名称附加到数组[$]

我已经尝试了一段时间没有运气.有什么指针吗?

mongodb mongodb-update

6
推荐指数
1
解决办法
6036
查看次数

基于数组元素查找对象,只返回匹配的数组元素?

我在mongoose中有一个Person对象,那个person对象有多个东西(每个东西都有一个唯一的ID).

person1 = {
  things[{id: 1, name: 'one'},{id:2, name: 'two'}]
}
person2 = {
  things[{id: 3, name: 'three'},{id:4, name: 'four'}]
}
Run Code Online (Sandbox Code Playgroud)

然后查询:

Person.findOne({'things.id': 2},{'things.$': 1}, function(err, person) { ...
Run Code Online (Sandbox Code Playgroud)

这很好但我正在搜索所有Person对象(可能有很多).在这种情况下,我知道我需要的人的ID和一个'东西'的唯一ID.通过id获取Person可能要快得多:

Person.findById(personId, function(err, person) { ...
Run Code Online (Sandbox Code Playgroud)

然后循环遍历所有事情以找到正确的:

var thing
person.things.forEach(function(t) {
  if (t.id == thingId) {
    thing = t;
  }
});
Run Code Online (Sandbox Code Playgroud)

我想知道的是,如果有更好的方法.我可以通过id查询Person集合来获取一个Person然后过滤掉我正在寻找的东西(没有丑陋的循环)?

mongoose mongodb node.js

6
推荐指数
1
解决办法
2万
查看次数

Mongo 更新一个数组的子文档

集合...这是我拥有的集合的结构。我需要更新查询方面的帮助。

{ 
  id: 1, 
  line_items: [
    {
      id: 43,
      review_request_sent: true
    }
  ]
},
{
  id: 2,
  line_items: [
    {
      id: 1,
      review_request_sent: false
    },
    {
      id: 39
    },
 ]
},
{
  id: 3,
  line_items: [
    {
     id: 23,
     review_request_sent: true
    },
    {
     id: 85,
     review_request_sent: true
    },
    {
     id: 12,
     review_request_sent: false
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我需要更新文档方面的帮助。假设将 review_request_sent 更新为 true,其中 id 为 3,line_item 的对象 id 为 12。

所以最后一个文件变成

{
  id: 3,
  line_items: [
    {
     id: 23,
     review_request_sent: true
    },
    { …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb mongodb-query

2
推荐指数
1
解决办法
2154
查看次数