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)
使用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
| 归档时间: |
|
| 查看次数: |
623 次 |
| 最近记录: |