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

这工作做得很好!你能解释一下为什么是这样,而不是我原来的样子吗?