流星:如何按数组的第一项对文档进行排序
Meteor: How to sort documents by the first item of an array
研究论文应按作者姓氏排序。这是一个作者的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}
无济于事。
我提出了map,reduce和聚合的概念,但不知道如何在这里应用以及是否有必要。
或者也许流星有包装或"技巧"?
任何帮助真的非常感谢。
假设您始终至少有一个作者,则可以执行以下操作:
Publications.find({}, {
sort: {
'authors.0.lastName': -1
}
});
db.publications.find({}).sort({"authors.lastName":-1})
工作得很好。它首先对文档中authors
数组进行排序,选取第一个元素,然后对文档进行排序。文档。
另一种通过aggregate()
方法使用聚合框架的替代方法,您可以对作者数组和文档进行排序。虽然 meteor 还不支持aggregate()
,但您需要安装聚合框架包 - 它没有任何花哨的作用,只是为您包装了一些 Mongo 方法。
只要流星加meteorhacks:aggregate
,你应该做生意。这将为流星添加适当的聚合支持。
现在,您需要运行此管道才能获得所需的结果:
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);
相关文章:
- 有没有一种方法可以在没有文档或jQuery的情况下使用javascript解码html实体
- KnockoutJS绑定每个文档不止一次
- 通过javascript拦截文档中的每一次点击
- 猫鼬找到一个并推送到一排文档
- PDF.js - 一次打印多个文档
- 有没有一种方法可以找到一个匹配两个不同填充的文档,并在findOne()中获取他的文档
- Firefox加载项:从选项卡获取文档
- 在文档就绪时追加DDL;不要让它在列表项上有CSS,而不让它们可排序
- 为什么在jQuery中将事件注册到文档中是一种糟糕的做法
- 一种JavaScript,可在文档就绪时自动点击flash对象
- MongoDB从一组未知子文档中的每一个$slice
- 流星:如何按数组的第一项对文档进行排序
- 有没有办法在不使用循环的情况下更新多个文档以将特定数字添加到一列
- 这是将两个文档元素的数组添加到一个数组中的最佳方法
- j查询文档加载时,每 3 秒检查一次并重新加载
- 返回一组文档,其中所有子数组都包含环回或nodejs中的给定值
- 有没有一种方法可以通过一些任意的排序标准从猫鼬集合中获得第n个文档
- 为文档的每一页创建缩略图
- 如何查找具有数组的文档,其中元素与另一个数组中的其他元素匹配
- 在模型中插入一组文档