【发布时间】:2021-07-01 03:46:23
【问题描述】:
场景
我有以下来自Chat 集合的文档,其中包含messages 和members 的数组。
对于每条消息,都会有一个状态字段,用于存储关于用户的已发送和已读取时间戳。
{
"_id" : ObjectId("60679797b4365465745065b2"),
"members" : [
ObjectId("604e02033f4fc07b6b82771c"),
ObjectId("6056ef4630d7b103d8043abd"),
ObjectId("6031e3dce8934f11f8c9a79c")
],
"isGroup" : true,
"createdAt" : 1617401743720.0,
"updatedAt" : 1617436504453.0,
"messages" : [
{
"createdAt" : 1617401743719.0,
"updatedAt" : 1617401743719.0,
"_id" : ObjectId("60679797b4365465745065b3"),
"body" : "This is test message",
"senderId" : ObjectId("6031e3dce8934f11f8c9a79c"),
"status" : []
}
]
}
所以,我想将以下数据插入到messages.status 数组中,以了解成员何时接收/读取消息。
{
receiverId: <member of chat>
deliveredAt: <timestamp>
readAt: <timestamp>
}
问题
如何编写查询,使用现有字段中的数据为status数组中的每个成员(发送者除外)插入上述json?
这样,在查询之后,文档应该是这样的:
{
"_id" : ObjectId("60679797b4365465745065b2"),
"members" : [
ObjectId("604e02033f4fc07b6b82771c"),
ObjectId("6056ef4630d7b103d8043abd"),
ObjectId("6031e3dce8934f11f8c9a79c")
],
"isGroup" : true,
"createdAt" : 1617401743720.0,
"updatedAt" : 1617436504453.0,
"messages" : [
{
"createdAt" : 1617401743719.0,
"updatedAt" : 1617401743719.0,
"_id" : ObjectId("60679797b4365465745065b3"),
"body" : "This is test message",
"senderId" : ObjectId("6031e3dce8934f11f8c9a79c"),
"status" : [{
"receiverId": ObjectId("604e02033f4fc07b6b82771c")
"deliveredAt": <timestamp>
"readAt": <timestamp>
}, {
"receiverId": ObjectId("6056ef4630d7b103d8043abd")
"deliveredAt": <timestamp>
"readAt": <timestamp>
}]
}
]
}
编辑
我可以对静态数据执行此操作。
链接:https://mongoplayground.net/p/LgVPfRoXL5p
为了便于理解:我必须映射 members 数组并将其插入到 messages 的 status 字段中
MongoDB 版本: 4.0.5
【问题讨论】:
-
您好,您能否详细说明这一点“为每个成员(发件人除外)插入上述json”。比如你如何识别
chats集合中的发件人?
标签: arrays mongodb nested mongodb-query