Mongo匹配基于数组组件的总和

时间:2018-01-19 18:43:06

标签: mongodb mongoose aggregation-framework

我有以下架构,我无法返回我想要的数据。

var Book = new Schema({
    ISBN: String,
    title: String,
    author: String,
    image: String,
    availability: [{zipcode: String,
                    total: Number,
                    loaned: Number
    }]
});

我想返回一个随机抽样的项目(可能是25个),其中有可用的项目。在这种情况下,可用性将被定义为总数大于在"可用性和#34;中的至少一个集合中所借出的数量。 (或通过查看所有集合中的总和和借出的总和)。每次我开始,我似乎碰到了一堵墙。有没有人知道这是否可行或如何做?

1 个答案:

答案 0 :(得分:0)

我最终通过这样做得到了它:

db.books.aggregate(
    [
        {
            $addFields: {
                available: {$gt: [{$sum: "$availability.total"}, {$sum: "$availability.loaned"}]}
            }
        },
        {
            $match: {available: true}
        },
        {
            $sample: {size: 25}
        }
    ]
)

我不确定这种方法是否有任何缺点,但是测试有限,它似乎对我有用。