Mongoose:查找并过滤嵌套的数组
我试图用Find()
命令Find()
整个文档,并用条件筛选嵌套数组。
这里使用了一个Schema:
var ListSH = new Schema({ name: { type: String, unique: true, required: true}, subject : String, recipients : [ Schema({ uid : { type : ObjectId, required : true, ref:'User', unique: true}, status : { type : Number, default : 1 } },{_id: false}) ] };
目前我做ListModel.findOne({ _id : req.params.id_list, function(err,list){...};
邮差给我:
{ "_id": "57e6bcab6b383120f0395aed", "name": "Emailing listname", "subject": "List subject", "recipients": [ { "uid": "57e932bcbbf0e9e543def600", "status": 0 }, { "uid": "57e93266c3c0b1dc1625986f", "status": 1 } ] }
我希望Postman通过添加一个recipients.status : 1
条件来返回类似的东西
{ "_id": "57e6bcab6b383120f0395aed", "name": "Emailing listname", "subject": "List subject", "recipients": [ { "uid": "57e93266c3c0b1dc1625986f", "status": 1 } ] }
我已经尝试过ListModel.findOne({ _id : req.params.id_list, 'recipients.status' : 1}, function(err,list){...};
和一些奇怪的喜欢populate([$match('recipients.status : 1)]);
但没有成功..
有谁知道 ? 谢谢^^
你可以像这样用一个简单的方法使用aggregate
来获得它
ListModel.aggregate( { $match: {_id: ObjectId("57e6bcab6b383120f0395aed")}}, { $unwind: '$recipients'}, { $match: {'recipients.status':1}})
产量
{ "_id" : ObjectId("57e6bcab6b383120f0395aed"), "name" : "Emailing listname", "subject" : "List subject", "recipients" : { "uid" : "57e93266c3c0b1dc1625986f", "status" : 1 } }
要详细了解汇总,请参阅此处的文档
试试下面的查询:
ListModel.findOne({"_id" : "57e6bcab6b383120f0395aed", 'recipients.status' : 1},{_id:1, name: 1, subject:1,'recipients.$': 1}, function(err,list){...});