我目前有一个结构如下的数据库......
"_id" : "neRmMTTkRvoKFGL3a",
"active_users" : [
{
"user" : {
"_id" : "CYyxPcAnfhns28stb",
...
},
"last_seen" : 1403814568360
},
{
Other users....
}
],
"room_name": "TestRoom"
我希望能够更新last_seen
属性。我一直在尝试使用以下查询(或其变体)但到目前为止没有运气。任何帮助将不胜感激。
db.rooms.update({room_name: "TestRoom",
'active_users.user._id': 'CYyxPcAnfhns28stb'
}, {$set: {'active_users.last_seen.$': Date.now()}})
答案 0 :(得分:2)
位置运算符($
)位于错误的位置。这段代码应该有效:
db.rooms.update({room_name: "TestRoom",
'active_users.user._id': 'CYyxPcAnfhns28stb'
}, {$set: {'active_users.$.last_seen': Date.now()}})
位置运算符标识数组中的元素。在您的情况下,active_users
是数组。如果您知道元素的位置,则可以使用其索引:
'active_users.1'
^ ^
array index
这引用了数组中的第一个元素:
{
"user" : {
"_id" : "CYyxPcAnfhns28stb",
...
},
"last_seen" : 1403814568360
}
如果您不知道索引,则需要使用位置运算符$
:
'active_users.$'
^ ^
array index
此位置运算符引用查询中匹配的数组中的元素('active_users.user._id': 'CYyxPcAnfhns28stb'
)。
然后在更新查询中,您要更新last_seen
字段。所以它变成了:
'active_users.$.last_seen'
^ ^ ^
array index field