MongoDB中的三重关系查找

时间:2017-03-08 20:44:10

标签: mongodb

我试图解决这个问题但是我的方法超过了我的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",
}

希望有人可以解决这个问题 - 现在我正在做一些可怕的顺序循环,并且大量的数据确实很慢。

1 个答案:

答案 0 :(得分:1)

您可以尝试以下聚合。

$lookup加入BookingProperty集合。

$unwind展开booking的{​​{1}}数组输出,以便将本地字段加入$lookup集合。

Property投射$addFields字段。

propertyName从引用的集合中排除字段。

$project