MongoDB $set 数组中不存在对象的项目作为元素导致对象而不是数组

标签 mongodb mongodb-query

此处解释了更新数组内的元素:

https://docs.mongodb.com/manual/reference/operator/update/set/#set-elements-in-arrays

但是在文档中似乎缺少文档中不存在数组的情况。例子:

如果有这个文件:

{
  _id: 'some-id',
  otherprops: 'value'
}

我希望它变成这样:
{
  // ...
  settings: {
    friends: [
      {
        name: 'John Doe',
        age: 28
      }
    ]
  }
  // ...
}

在这种情况下,我不知道是否已经有 settings.friends 数组。所以我的查询如下所示:
{
  $set: {
    'settings.friends.0.name': 'John Doe',
    'settings.friends.0.age': 28
  }
}

然而,该文件的结果是这样的:
{
  // ...
  settings: {
    friends: {
      0: {
        name: 'John Doe',
        age: 28
      }
    }
  }
  // ...
}

有没有办法强制 mongodb 在我的例子中创建一个数组而不是一个对象 但仅使用点符号。

最佳答案

try this.


{
    $addToSet: {
        "settings.friends": [
            {
                name: 'John Doe',
                age: 28
            }
        ]
    }
}

关于MongoDB $set 数组中不存在对象的项目作为元素导致对象而不是数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55999996/

相关文章:

mongodb - 无法连接 MongoDB Compass

javascript - Mongoose 模型如何在不导出的情况下工作

mongodb - Mongo $lookup 具有更多集合和空字段

node.js - 追加 ObjectId 数组

javascript - NodeJs : Filter mongo query results with results from another collection

java - MongoDB 查询性能分析

arrays - 如何在 Mongoose 中查询 findOne() 以便我们获得满足特定条件的文档数组的子集?

node.js - Mongoose $lookup 聚合无法按预期工作

mongodb - 仅返回嵌套数组中匹配的子文档元素

mongodb - 更新双嵌套数组mongodb