研究论文应按作者的姓氏排序。这就是JSON与一位作者的看法:
{
"_id" : "ADnijjRpoWkTEGgkc",
"authors" : [
{
"lastName" : "Rahbaran",
"firstName" : "Amir"
}
],
"title" : "Bricolage revisted",
"outlet" : "Journal of Strategic Management",
"year" : "2017",
"abstract" : "dicta sunt explicabo. Nemo enim ..."
}
如果只存储了一位作者,则相应的模板助手可以正常工作:
return Publications.find({}, {
sort: {"authors.lastName": -1}
}).fetch();
问题:在很多情况下,一篇研究论文中有多位作者:
这将是JSON:
{
"_id" : ObjectId("56b06047204a563ca4207e8e"),
"authors" : [
{
"lastName" : "Lennon",
"firstName" : "John"
},
{
"lastName" : "McCartney",
"firstName" : "Paul"
}
],
"title" : "The Beatles - revisted",
"outlet" : "Journal of Great Music",
"year" : "1968",
"abstract" : "Ob-La-Di, Ob-La-Da ... "
}
现在,我尝试sort: {"authors.lastName.0": -1}
或sort: {"authors.lastName[0]": -1}
无济于事。
我出现了地图,缩小和汇总的概念,但不知道如何在这里申请,如果有必要,也分别知道。
或许Meteor有包裹或"技巧"那个?
任何帮助都非常感激。
答案 0 :(得分:1)
假设您总是至少有一位作者,您可以执行以下操作:
Publications.find({}, {
sort: {
'authors.0.lastName': -1
}
});
答案 1 :(得分:1)
db.publications.find({}).sort({"authors.lastName":-1})
完美无缺。它首先在文档中对authors
数组进行排序,选择第一个元素,然后对文档进行排序。 Documentation
答案 2 :(得分:1)
通过 aggregation framework 方法使用 aggregate()
的另一种方法,您可以对作者数组以及文档进行排序。虽然meteor中还不支持 aggregate()
,但您需要安装聚合框架包 - 它不会做任何想象,只需为您包装一些Mongo方法。
只是流星添加 meteorhacks:aggregate
,您应该开展业务。这将为Meteor添加适当的聚合支持。
现在您需要运行此管道以获得所需的结果:
var pipeline = [
{ "$unwind": "authors" },
{ "$sort": { "authors.lastName": -1 } },
{
"$group": {
"_id": "$authors",
"authors": { "$push": "$authors" },
"title": { "$first": "$title" },
"outlet": { "$first": "$outlet" },
"year": { "$first": "$year" },
"abstract": { "$first": "$abstract" }
}
},
{ "$sort": { "authors.lastName": -1 } },
];
return Publications.aggregate(pipeline);