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

TJR*_*TJR 6 mongodb mongodb-query

这里解释了更新数组内的元素:

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

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

如果有这个文件:

{
  _id: 'some-id',
  otherprops: 'value'
}
Run Code Online (Sandbox Code Playgroud)

我希望它变成这样:

{
  // ...
  settings: {
    friends: [
      {
        name: 'John Doe',
        age: 28
      }
    ]
  }
  // ...
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我不知道是否已经有一个settings.friends数组。所以我的查询如下所示:

{
  $set: {
    'settings.friends.0.name': 'John Doe',
    'settings.friends.0.age': 28
  }
}
Run Code Online (Sandbox Code Playgroud)

然而文档的结果是这样的:

{
  // ...
  settings: {
    friends: {
      0: {
        name: 'John Doe',
        age: 28
      }
    }
  }
  // ...
}
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*esh 0

尝试这个。

{
    $addToSet: {
        "settings.friends": [
            {
                name: 'John Doe',
                age: 28
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)