MongoDB更新属性嵌套数组
我目前有一个数据库,其结构如下MongoDB更新属性嵌套数组,mongodb,mongodb-query,Mongodb,Mongodb Query,我目前有一个数据库,其结构如下 "_id" : "neRmMTTkRvoKFGL3a", "active_users" : [ { "user" : { "_id" : "CYyxPcAnfhns28stb", ... }, "last_see
"_id" : "neRmMTTkRvoKFGL3a",
"active_users" : [
{
"user" : {
"_id" : "CYyxPcAnfhns28stb",
...
},
"last_seen" : 1403814568360
},
{
Other users....
}
],
"room_name": "TestRoom"
我希望能够更新上次看到的属性。我一直在尝试使用以下查询(或其变体),但到目前为止运气不佳。任何帮助都将不胜感激
db.rooms.update({room_name: "TestRoom",
'active_users.user._id': 'CYyxPcAnfhns28stb'
}, {$set: {'active_users.last_seen.$': Date.now()}})
位置运算符($
)位于错误的位置。此代码应适用于:
db.rooms.update({room_name: "TestRoom",
'active_users.user._id': 'CYyxPcAnfhns28stb'
}, {$set: {'active_users.$.last_seen': Date.now()}})
位置运算符标识数组中的元素。在您的情况下,活动用户
是数组。如果知道元素的位置,可以使用其索引:
'active_users.1'
^ ^
array index
这将引用数组中的第一个元素:
{
"user" : {
"_id" : "CYyxPcAnfhns28stb",
...
},
"last_seen" : 1403814568360
}
如果不知道索引,则需要使用位置运算符$
:
'active_users.$'
^ ^
array index
此位置运算符引用在查询中匹配的数组中的元素('active\u users.user.\u id':'cyxpcanfhns28stb'
)
然后在更新查询中,您要更新last\u seen
字段。因此,它变成:
'active_users.$.last_seen'
^ ^ ^
array index field
这工作做得很好!你能解释一下为什么是这样,而不是我原来的样子吗?