我试图解决这个问题但是我的方法超过了我的Mongo技能水平。 我希望有一些聪明的Mongo巫师有一个想法: - )
我想在
中得到一个结果db.getCollection('invoice').find({
dueDate: {
$gte:148000000,
$lt: 149000000
}
})
这是“发票”表....
invoice
{
"_id" : "KLKIU",
"invoiceNumber" : 1,
"bookingId" : "0J0DR",
"dueDate" : "148100000",
"account" : "aaaaaaaaaa",
"invoiceLines" : [
{
"lineText" : "Booking fee",
"amount" : 1000
},
{
"lineText" : "Discount",
"amount" : -200
},
{
"lineText" : "Whatever extra",
"amount" : 400
}
]
}
这是结果
{
"_id" : "KLKIU",
"invoiceNumber" : 1,
"bookingId" : "0J0DR",
"dueDate" : "148100000",
"account" : "aaaaaaaaaa",
"invoiceLines" : [
{
"lineText" : "Booking fee",
"amount" : 1000
},
{
"lineText" : "Discount",
"amount" : -200
},
{
"lineText" : "Whatever extra",
"amount" : 400
}
],
"propertyName" : "Atlantis Condo",
}
请注意底部的“propertyName”
需要查找和添加 “propertyName”:“亚特兰蒂斯公寓”, 这将是这样做的
db.getCollection('booking').find({
booking._id: invoice.bookingId
})
然后
db.getCollection('property').find({
property._id: booking:propertyId
})
这是两个表:
Booking
{
"_id" : "0J0DR",
"propertyId" : "58669471869659d70b424ea7",
}
Property
{
"_id" : "58669471869659d70b424ea7",
"propertyName" : "Atlantis Condo",
}
希望有人可以解决这个问题 - 现在我正在做一些可怕的顺序循环,并且大量的数据确实很慢。
答案 0 :(得分:1)
您可以尝试以下聚合。
$lookup
加入Booking
和Property
集合。
$unwind
展开booking
的{{1}}数组输出,以便将本地字段加入$lookup
集合。
Property
投射$addFields
字段。
propertyName
从引用的集合中排除字段。
$project