node.js - 如何在 MongoDB Aggregate 中查找内部查找?
问题描述
我有一个简单的 3 个集合。下面是他们的伪代码。我想获得所有货物,对于每批货物,我想获得该货物的所有出价,并且在每次出价中,我都需要 userDetails 对象。
User: {
name: string,
}
Shipment: {
from: string,
to: string
}
Bid: {
amount: number,
shipmentId: Ref_to_Shipment
userId: Ref_to_User
}
这是我尝试过的:
const shipments = await ShipmentModel.aggregate([
{
$lookup: {
from: "bids",
localField: "_id",
foreignField: "shipmentId",
as: "bids"
}
},
{
$lookup: {
from: "users",
localField: "bids.userId",
foreignField: "_id",
as: "bids.user"
}
}
])
我得到了以下结果:
[
{
"_id": "5fad2fc04458ac156531d1b1",
"from": "Belgrade",
"to": "London",
"__v": 0,
"bids": {
"user": [
{
"_id": "5fad2cdb4d19c80d1b6abcb7",
"name": "Amel",
"email": "Muminovic",
"password": "d2d2d2",
"__v": 0
}
]
}
}
]
我正在尝试让所有货件及其出价和出价内的用户。数据应如下所示:
[
{
"_id": "5fad2fc04458ac156531d1b1",
"from": "Belgrade",
"to": "London",
"__v": 0,
"bids": [
{
"_id": "5fad341887c2ae1feff73402",
"amount": 400,
"userId": "5fad2cdb4d19c80d1b6abcb7",
"shipmentId": "5fad2fc04458ac156531d1b1",
"user": {
"name": "Amel",
}
"__v": 0
}
]
}
]
解决方案
尝试使用以下代码:
const shipments = await ShipmentModel.aggregate([
{
$lookup: {
from: "bids",
localField: "_id",
foreignField: "shipmentId",
as: "bids"
}
},
{
$unwind: {
path: "$bids",
preserveNullAndEmptyArrays: true
}
},
{
$lookup: {
from: "users",
localField: "bids.userId",
foreignField: "_id",
as: "bids.user"
}
}
])
如果要防止空数组和空数组,请设置
preserveNullAndEmptyArrays: false
推荐阅读
- android - 在华为 mapkit 中获取我的位置按钮的参考
- r - R:随机森林回归模型中的错误训练数据
- channel - 在“goland”中调试通道
- visual-studio-code - 如何在 VS Code 中为一种文件类型配置多个查看器?
- python - Swift vDSP rFFT 与 Python np.fft.rfft() 不同
- azure - Azure 自动化无法将参数传递给 VM 内的 powershell 脚本
- wso2 - 创建辅助用户存储时 WSO2 IS 5.9 错误
- java - 集群(多个实例)Quartz 调度程序中断 API 无法有效工作
- python - 如何重塑 BatchDataset 类张量?
- java - 如何调整JVM的默认内存大小比例