Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MongoDB在对象数组中查找匹配文档并更新匹配字段_Javascript_Database_Mongodb_Nosql - Fatal编程技术网

Javascript MongoDB在对象数组中查找匹配文档并更新匹配字段

Javascript MongoDB在对象数组中查找匹配文档并更新匹配字段,javascript,database,mongodb,nosql,Javascript,Database,Mongodb,Nosql,因此,我有一个threads对象的文档结构,其中每个线程包含多条消息,还包含用户读到的消息的数据: 线程集合: { _id: ObjectId("5f1f0725850eca800c70ef9e"), thread_participants: [ ObjectId("5f1efeece50f2b25d4be2de2"), ObjectId("5f1eff1ae50f2b25d4be2de4"),

因此,我有一个
threads
对象的文档结构,其中每个线程包含多条消息,还包含用户读到的消息的数据:

线程集合:

{
    _id: ObjectId("5f1f0725850eca800c70ef9e"),
    thread_participants: [
      ObjectId("5f1efeece50f2b25d4be2de2"),
      ObjectId("5f1eff1ae50f2b25d4be2de4"),
    ],
    messages: [
      {
        id: ObjectId("5f1f0725850eca800c70ef98"),
        content: "Hello",
      },
      {
        id: ObjectId("5f1f0725850eca800c70ef92"),
        content: "Hey there!",
      },
    ],
    seen_status: [
        {
            user_id: "5f1efeece50f2b25d4be2de2",
            last_read_message_id: ObjectId("5f1f0725850eca800c70ef98")
        },
        {
            user_id: "5f1eff1ae50f2b25d4be2de4",
            last_read_message_id: null //User has not opened the conversation at all.
        }
    ],
    date_created: ISODate("2020-07-27T16:29:54.702Z"),
}
...
...
...
multiple threads
如何在线程
5f1f0725850eca800c70ef9e
上更新特定用户id的上次读取消息\u id,以便用户id
5f1eff1ae50f2b25d4be2de4

可以使用:


使用和位置运算符更新内部文档

注意-这需要MongoDb 3.6+

var filter = {
    _id: ObjectId('5f1f0725850eca800c70ef9e')
};

var update = {
    $set: {
        'seen_status.$[item].last_read_message_id': 5
    }
};

var options = {
    arrayFilters: [
        {
            'item.user_id' : ObjectId('5f1eff1ae50f2b25d4be2de4')
        }
    ]
};
db.collection.update(filter, update, options);
var filter = {
    _id: ObjectId('5f1f0725850eca800c70ef9e')
};

var update = {
    $set: {
        'seen_status.$[item].last_read_message_id': 5
    }
};

var options = {
    arrayFilters: [
        {
            'item.user_id' : ObjectId('5f1eff1ae50f2b25d4be2de4')
        }
    ]
};
db.collection.update(filter, update, options);