如何使用Mongoose查找数组元素?

时间:2017-07-02 16:12:13

标签: arrays node.js mongodb mongoose mongoose-schema

我有一个数组作为Mongoose模型中的子文档,定义如下:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var schema = Schema({
    author: { type: Schema.Types.ObjectId, ref: 'Author' },
    pages: [{
        number: Number, 
        type: { type: String, enum: ['boring', 'fun']},
    }]
});

module.exports = mongoose.model('Book', schema);

现在,我希望获得某位作者所有图书中'fun'页的总数。我发现很多类似的问题(和答案)讨论了如何在这个场景中找到有趣页面的Book,但是我希望获得所有有趣页面的数组,或者至少是该数组的长度,但是如果可能的话我想得到阵列本身。我怎么能这样做?

谢谢,

1 个答案:

答案 0 :(得分:1)

我相信,除了语法之外,这是非常不言自明的:

Book.aggregate(

    { 
        $match: {
            author: ObjectId("12-bytes-of-hex")
        }
     },

    { $unwind: "$pages" },

    { $group: {
        _id: "$pages.type",
        count: { $sum: 1 }
    }}
)