如何在albums
数组中将“album1”设置为“我的相册”?我只知道它的_id
。
{
"_id": ObjectId("4f41a5c7c32810e404000000"),
"albums": {
"0": {
"_id": ObjectId("4f545d1bc328103812000000"),
"name": "album1"
},
"1": {
"_id": ObjectId("4f545f56c328103c12000000"),
"name": "album2"
},
"2": {
"_id": ObjectId("4f545f68c328103012000000"),
"name": "album3"
},
"3": {
"_id": ObjectId("4f546642c328103c12000001"),
"name": "album4"
}
}
答案 0 :(得分:0)
您的架构不正确。如果你需要一个数组,你应该将它定义为这样,而不是使它成为一个地图(这是因为你的数组索引实际上是键,所以它是当前的。)
转换为数组:
{
"_id": ObjectId("4f41a5c7c32810e404000000"),
"albums": [
{
"_id": ObjectId("4f545d1bc328103812000000"),
"name": "album1"
},
{
"_id": ObjectId("4f545f56c328103c12000000"),
"name": "album2"
},
{
"_id": ObjectId("4f545f68c328103012000000"),
"name": "album3"
},
{
"_id": ObjectId("4f546642c328103c12000001"),
"name": "album4"
}]
}
然后使用位置运算符进行更新:
db.col.update({'albums._id':..}, {$set:{'albums.$.name':"My Album"}})
请注意,在嵌入元素中使用_id最多会让人感到困惑。