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,以便用户id5f1eff1ae50f2b25d4be2de4
?可以使用:
使用和位置运算符更新内部文档 注意-这需要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);