从匹配属性的数组中获取所有结果

mar*_*ria 6 mongoose mongodb node.js mongodb-query aggregation-framework

我知道如何使MongoDB基于这样的数组找到一行:

useritems.find({userid: useridhere,  "items.id": idhere})
Run Code Online (Sandbox Code Playgroud)

但是,我将如何搜索并获取所有激活的项目,或者根据items属性获取所有项目?例如:

useritems.find({userid: useridhere,  "items.activated": true})
Run Code Online (Sandbox Code Playgroud)

将导致从激活的用户获取所有项目是真的.

这是我的项目架构:

var userItemsSchema = new Schema({
    userid : String,
    items: [
        {
            id: {type: Number, default: 1},
            activated: { type: Boolean, default: false},
            endtime : {type: Number, default: 0},
        },
    ],
});

module.exports = mongoose.model('useritems', userItemsSchema);
Run Code Online (Sandbox Code Playgroud)

Sky*_*yAo 1

使用aggregate如下方式可能是一个不错的选择:

useritems.aggregate(
    { $match: {"_id" : id}},
    { $unwind: '$items'},
    { $match: {'items.activated': true}},
    { $group: {_id: '$_id', items: {$push: '$items'}}})
Run Code Online (Sandbox Code Playgroud)

您可以在此问题中获得更多信息:How to filter array in subdocument with MongoDB