这是我的mongodb文件
{
"_id" : "a3s6HzG9swNB3bQ78",
"comments" : [
{
"cmt_text" : "opp",
"vCount" : 2,
},
{
"cmt_text" : "o2",
"vCount" : 5,
},
{
"cmt_text" : "o3",
"vCount" : 3,
}
],
"question" : "test ques 3"
}
我想使用vCount
字段对结果进行排序如何实现此目的
我尝试了以下但似乎无法正常工作
Coll.findOne( {_id:this._id},{sort:{ "comments.vCount" : 1 }});
Coll.findOne( {_id:this._id},{sort:{ "comments.$.vCount" : 1 }});
谁知道这个???
修改
我们只返回一个文档,我想根据vCount
显示该文档注释数组值。我的代码
{{#each all_comments.comments}}
<br>{{cmt_text}}</p>
{{/each}}
我想要显示如下
o2
o3
opp
修改
这在shell中工作正常
db.testCol.aggregate([
{ $unwind: "$comments" },
{ $group: { _id: { id:"$_id", vcount:"$comments.vCount"} } },
{ $sort: { "_id.vcount":1 }}
])
为什么它不能在我的流星应用程序中工作
error:object has no method aggregate
答案 0 :(得分:3)
这是正确的:
Coll.findOne( { _id: this._id }, { sort: { 'comments.vCount' : 1 } } );
在$
前面 否 sort
。
修改强>
如果要对嵌套数组进行排序,请查看here。
答案 1 :(得分:2)
aggregate
目前无法在客户端上使用。您可以只执行findOne
,提取comments数组,并将已排序的版本返回给模板。例如:
Template.allComments.helpers({
comments: function() {
var coll = Coll.findOne(this._id);
return _.sortBy(coll.comments, function(comment) {
return -comment.vcount;
});
}
});
<template name="allComments">
{{#each comments}}
<br>{{cmt_text}}</p>
{{/each}}
</template>
答案 2 :(得分:1)
您应该学习聚合来处理子文档,数组以及数组中的子文档。对于你的排序问题,这可行。
db.testCol.aggregate([
{ $unwind: "$comments" },
{ $group: { _id: { id:"$_id", vcount:"$comments.vCount"} } },
{ $sort: { "_id.vcount":1 }}
])
编辑:根据您的修改,您可以添加$project
运算符;
db.testCol.aggregate([
{ $unwind: "$comments" },
{ $group: { _id: { id:"$_id", vcount:"$comments.vCount", text:"$comments.cmt_text"} } },
{ $sort: { "_id.vcount":1 }},
{ $project: { text: "$_id.text", _id:0}}
])