我想创建一个查询,该查询通过提供一个查询参数从三个不同的集合中获取数据。我见过使用$lookup的方法,但我不想将其用作I cannot use it on sharded collections.
这是一个进一步解释的例子。
我有三个集合:用户,聊天室和chatMessage。
用户集合:
{
_id: ObjectId('456'),
username: 'John',
contacts: [
{
_id: ObjectId('AB12'),
name: 'Mary',
idOfContact: ObjectId('123'),
},
{
_id: ObjectId('AB34'),
name: 'Jane',
_idOfContact: ObjectId('234'),
},
{
_id: ObjectId('AB56'),
name: 'Peter',
_idOfContact: ObjectId('345'),
}
],
}
聊天室集合:
{
_id: ObjectId('AB34'),
usersInThisChatRoom: [
ObjectId("456"),
ObjectId("123"),
ObjectId("234"),
]
}
chatMessage集合:
[
{
_id: ObjectId("M01"),
chatRoomObjectId: _id: ObjectId('AB34'),
senderObjectId: ObjectId('456'),
message: 'Hello humans!',
date: ISODate("2019-09-03T07:24:28.742Z"),
},
...(other messages)
]
我想退还什么
[
{
chatRoomObjectId: ObjectId('AB34'),
usersInThisChatRoom: [
{
contactName: 'John',
contactUserId: ObjectId('456'),
},
contactName: 'Mary',
contactUserId: ObjectId('123'),
},
contactName: 'Jane',
contactUserId: ObjectId('234'),
}
]
chatMessages: [
{
_id: ObjectId("M01"),
senderObjectId: ObjectId('456'),
message: 'Hello humans!',
date: ISODate("2019-09-03T07:24:28.742Z"),
},
...(other messages)
]
},
...(other documents)
]
是否有一种方法可以通过使用user._id
进行单个查询来获得期望的结果,这是否对性能友好?
或者,我是否必须一次又一次地进行几个查询才能实现我想要的?
答案 0 :(得分:0)
根据this answer,您无法跨多个集合执行单个查询(除了$ lookup聚合管道功能之外。
这意味着您要么使用$ lookup聚合管道,要么对数据库进行多个查询。