你好,我有一个数据库,有这些以下集合的
db={
"category": [
{
"_id": 1,
"item": "Cat A",
},
{
"_id": 2,
"item": "Cat B",
},
],
"sticker": [
{
"_id": 1,
"item": "Sticker 1",
},
],
"prefix": [
{
"_id": 1,
"item": "prefix 1",
},
],
"store": [
{
"_id": 1,
"item": "Item 1",
"category_id": "1",
"sticker_id": "1",
"prefix_id": "1",
},
{
"_id": 2,
"item": "Item 2",
"category_id": "2",
"sticker_id": "1",
"prefix_id": "1",
},
{
"_id": 3,
"item": "Item 3",
"category_id": "1",
"sticker_id": "1",
"prefix_id": "1",
},
],
}
我正在使用下面的查询从mongo集合中获取数据
await category.aggregate([
{
$match: {
_id: 1,
}
},
{
$lookup: {
"from": "store",
let: { cid: "$_id" },
pipeline: [
{$match: {$expr: {$eq: [ "$category_id", "$$cid" ]} }},
],
as: "stores"
}
}
])
通过这个查询,我得到了category、prefix和sticker的objectId作为响应,但我需要与objectId沿着的数据,如下所示
预期响应
[
{
"_id": 1,
"item": "Cat A",
"stores": [{
"_id": 1,
"item": "item 1",
"stickerData": {
"_id": 1,
"item": "Sticker 1",
},
"prefixData": {
"_id": 1,
"item": "prefix 1",
},
},
{
"_id": 3,
"item": "item 3",
"stickerData": {
"_id": 1,
"item": "Sticker 1",
},
"prefixData": {
"_id": 1,
"item": "prefix 1",
},
},
],
},
]
有没有人能提出一些适当的问题
1条答案
按热度按时间m2xkgtsf1#
在
$lookup
stage中,您必须有多个$lookup
stage,并通过管道连接 prefix 和 sticker 集合。请注意,store、prefix 和 sticker 集合中的
_id
都是数字,而 store 集合中的store_id
、prefix_id
和sticker_id
是字符串,请确保在连接时,两个id应作为相同类型进行比较。下面的查询示例将_id
转换为字符串。Demo @ Mongo Playground