我在文档中有数组,我尝试接收该数组的最后一个元素。
我的代码是:
Post.find({_id:postId},{'comments':{'$slice':-1}});
这给了我所有的对象,但是comments数组只包含最后一个元素。
另一方面,
Post.find({_id:postId},{'comments':1});
只给我评论。
我没有找到如何将两个命令组合在一起。怎么做?
{
"users":[],
"comments":["string1","string2","string3"],
"lastValue":"Wow"
"name":"jow"
"_id": {
"$oid": "5747d6bdecfae9d0560077cc"
},
}
由于
答案 0 :(得分:2)
我希望这会有所帮助。
db.Post.find({_id:postId},{'comments':{'$slice':-1},_id:0,users:0,lastValue:0,name:0});
答案 1 :(得分:2)
您可能希望使用mongodb(版本3.2)聚合$slice:
Post.aggregate([
{
$match: {
'_id.$oid': postId
}
},
{
$project: {
comments: {
$slice: [ "$comments", -1 ]
}
}
}
]);
在早期版本的mongodb中:
Post.aggregate([
{
$match: {
'_id.$oid': postId
}
},
{
$unwind: "$comments"
},
{
$group : {
_id: "$_id.$oid",
comment: { $last: "$comments" }
}
}
]);
答案 2 :(得分:1)
对于Mongoose
,slice
也可以这样工作,
model.find({
// condition
})
.select('fields')
.slice('array', -1) // <------ Here
.then((data) => {
// handle
})
.catch();
只需编写伪代码,因为它可能会对某人有所帮助。