数据结构:
{
_id: '1',
'title: 'Blabla',
comments: [ {id:'3', type:'normal'} ,
{id: '4', type: 'admin'},
{id: '5', type: 'admin'},
{id: '6', type: 'admin'}
]
}
我想要获得的是类型 管理员的最后5条评论:
{ comments: [{id:4, type:'admin'}, {id: '5', type: 'admin'}, {id: '6', type: 'admin'}] }
我尝试了什么:
db.collection('posts').find({_id: '1', 'comments.type':'admin'}
, {
comments:{$slice: -5},
comments:1, _id:0
})
但如果至少有一个类型为admin的项目存在,则返回空洞注释数组。
答案 0 :(得分:4)
您可以尝试使用聚合框架:
db.collection.aggregate([
{ $match: {_id: "1"} },
{ $unwind: "$comments" },
{ $match: { "comments.type": "admin" } },
{ $sort: { "comments.id": -1 } },
{ $limit: 5 }
])
这将生成_id="1"
的最后5条评论列表:
{ "_id" : "1", "title" : "abc", "comments" : { "id" : "7", "type" : "admin" } }
{ "_id" : "1", "title" : "abc", "comments" : { "id" : "6", "type" : "admin" } }
{ "_id" : "1", "title" : "abc", "comments" : { "id" : "5", "type" : "admin" } }
{ "_id" : "1", "title" : "abc", "comments" : { "id" : "4", "type" : "admin" } }
{ "_id" : "1", "title" : "abc", "comments" : { "id" : "3", "type" : "admin" } }
答案 1 :(得分:0)
您可以使用$elemMatch运算符:
db.collection('posts').find(
{
_id: '1',
},
{
comments: {
$elemMatch: {
'type': 'admin'
}
}
}
)