在数组中更新元素的说明如下:
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创建数组而不是对象,而只能使用点符号。
答案 0 :(得分:1)
尝试一下。
{
$addToSet: {
"settings.friends": [
{
name: 'John Doe',
age: 28
}
]
}
}
答案 1 :(得分:0)
这在mongodb v4.0.9版本中有效。我已经在我的机器上测试了您的用例。
db.collection.update(
{
"_id": 'your_key'
},
{
"$set": {
"settings.friends.0.name": "ABCD"
}
},
{
"upsert": "true"
}
)
在更新之前,我的收藏条目为
{
"_id" : 2,
"col1" : "val01",
"settings" : {
"friends" : [
{
"name" : "Ramraj",
"age" : 28
}
]
}
}
更新后,我的收藏条目为
{
"_id" : 2,
"col1" : "val01",
"settings" : {
"friends" : [
{
"name" : "ABCD",
"age" : 28
}
]
}
}