仅提取查找的 return (mongoose)
Excract only the lookup's return (mongoose)
所以我的 mongodb 里有两个 collections。
// Collection 1, named Event
{
"_id": "625335297fcc20782bcdf085",
"title": "Evento 1",
"description": "lorem ipsum evento 1",
"img": "nao implementado",
"value": 0,
"remainingVacancies": 14,
"isSingleDay": false,
"dateByDay": [
{
"initialDate": "2022-04-10T21:17:09.785Z",
"finalDate": "2022-04-10T21:17:09.785Z",
"_id": "62534955171ecadae7ff6cd4"
},
{
"initialDate": "2022-04-10T21:17:09.785Z",
"finalDate": "2022-04-10T21:17:09.786Z",
"_id": "62534955171ecadae7ff6cd5"
}
],
"__v": 0
}
和
// Collection 2, named Presentation
{
"_id": "62549d4d3b41827fe7593332",
"title": "Apresentação 1",
"description": "lorem ipsum 11 testee",
"img": "nao implementado",
"value": 0,
"remainingVacancies": 14,
"isSingleDay": true,
"dateByDay": [
{
"initialDate": "2022-04-11T21:27:41.823Z",
"finalDate": "2022-04-11T21:27:41.823Z",
"_id": "62549d4d3b41827fe7593333"
}
],
"eventId": "625335297fcc20782bcdf085",
"__v": 0
}
我试过像这样在事件中使用查找聚合:
Event.aggregate([
{
$match: {
_id: mongoose.Types.ObjectId(_id)
},
},
{
$lookup: {
from: 'presentations',
localField: '_id',
foreignField: 'eventId',
as: 'registeredPresentations'
},
},
{
$unwind: "$registeredPresentations"
},
{
$project: {
_id: 0,
registeredPresentations: 1
}
},
]);
它return是这个输出
{
"registeredPresentations": {
"_id": "6254900aa5b5977e99498ee0",
"title": "Apresentação 1",
"description": "lorem ipsum 22 testee",
"img": "nao implementado",
"value": 0,
"remainingVacancies": 14,
"isSingleDay": true,
"dateByDay": [
{
"initialDate": "2022-04-11T20:31:06.324Z",
"finalDate": "2022-04-11T20:31:06.324Z",
"_id": "6254900aa5b5977e99498ee1"
}
],
"eventId": "625335297fcc20782bcdf085",
"__v": 0
}
},
但是因为我在一个事件中有多个相关的演示文稿,所以我不希望值 returns 作为“registeredPresentations”的 object。我想要的是使用 lookup 在输出中提取没有“registeredPresentations”的 return,就像这样:
{
"_id": "62549d4d3b41827fe7593332",
"title": "Apresentação 1",
"description": "lorem ipsum 11 testee",
"img": "nao implementado",
"value": 0,
"remainingVacancies": 14,
"isSingleDay": true,
"dateByDay": [
{
"initialDate": "2022-04-11T21:27:41.823Z",
"finalDate": "2022-04-11T21:27:41.823Z",
"_id": "62549d4d3b41827fe7593333"
}
],
"eventId": "625335297fcc20782bcdf085",
"__v": 0
},
有没有办法在输出中没有“registeredPresentations”的情况下提取这个值?
使用$replaceWith
db.orders.aggregate([
{
$match: {
_id: "625335297fcc20782bcdf085"
}
},
{
$lookup: {
from: "presentations",
localField: "_id",
foreignField: "eventId",
as: "registeredPresentations"
}
},
{
$unwind: "$registeredPresentations"
},
{
$project: {
_id: 0,
registeredPresentations: 1
}
},
{
$replaceWith: "$registeredPresentations"
}
])
所以我的 mongodb 里有两个 collections。
// Collection 1, named Event
{
"_id": "625335297fcc20782bcdf085",
"title": "Evento 1",
"description": "lorem ipsum evento 1",
"img": "nao implementado",
"value": 0,
"remainingVacancies": 14,
"isSingleDay": false,
"dateByDay": [
{
"initialDate": "2022-04-10T21:17:09.785Z",
"finalDate": "2022-04-10T21:17:09.785Z",
"_id": "62534955171ecadae7ff6cd4"
},
{
"initialDate": "2022-04-10T21:17:09.785Z",
"finalDate": "2022-04-10T21:17:09.786Z",
"_id": "62534955171ecadae7ff6cd5"
}
],
"__v": 0
}
和
// Collection 2, named Presentation
{
"_id": "62549d4d3b41827fe7593332",
"title": "Apresentação 1",
"description": "lorem ipsum 11 testee",
"img": "nao implementado",
"value": 0,
"remainingVacancies": 14,
"isSingleDay": true,
"dateByDay": [
{
"initialDate": "2022-04-11T21:27:41.823Z",
"finalDate": "2022-04-11T21:27:41.823Z",
"_id": "62549d4d3b41827fe7593333"
}
],
"eventId": "625335297fcc20782bcdf085",
"__v": 0
}
我试过像这样在事件中使用查找聚合:
Event.aggregate([
{
$match: {
_id: mongoose.Types.ObjectId(_id)
},
},
{
$lookup: {
from: 'presentations',
localField: '_id',
foreignField: 'eventId',
as: 'registeredPresentations'
},
},
{
$unwind: "$registeredPresentations"
},
{
$project: {
_id: 0,
registeredPresentations: 1
}
},
]);
它return是这个输出
{
"registeredPresentations": {
"_id": "6254900aa5b5977e99498ee0",
"title": "Apresentação 1",
"description": "lorem ipsum 22 testee",
"img": "nao implementado",
"value": 0,
"remainingVacancies": 14,
"isSingleDay": true,
"dateByDay": [
{
"initialDate": "2022-04-11T20:31:06.324Z",
"finalDate": "2022-04-11T20:31:06.324Z",
"_id": "6254900aa5b5977e99498ee1"
}
],
"eventId": "625335297fcc20782bcdf085",
"__v": 0
}
},
但是因为我在一个事件中有多个相关的演示文稿,所以我不希望值 returns 作为“registeredPresentations”的 object。我想要的是使用 lookup 在输出中提取没有“registeredPresentations”的 return,就像这样:
{
"_id": "62549d4d3b41827fe7593332",
"title": "Apresentação 1",
"description": "lorem ipsum 11 testee",
"img": "nao implementado",
"value": 0,
"remainingVacancies": 14,
"isSingleDay": true,
"dateByDay": [
{
"initialDate": "2022-04-11T21:27:41.823Z",
"finalDate": "2022-04-11T21:27:41.823Z",
"_id": "62549d4d3b41827fe7593333"
}
],
"eventId": "625335297fcc20782bcdf085",
"__v": 0
},
有没有办法在输出中没有“registeredPresentations”的情况下提取这个值?
使用$replaceWith
db.orders.aggregate([
{
$match: {
_id: "625335297fcc20782bcdf085"
}
},
{
$lookup: {
from: "presentations",
localField: "_id",
foreignField: "eventId",
as: "registeredPresentations"
}
},
{
$unwind: "$registeredPresentations"
},
{
$project: {
_id: 0,
registeredPresentations: 1
}
},
{
$replaceWith: "$registeredPresentations"
}
])