为了扩展我的node.js
应用程序的JSON-API功能,我尝试根据关系(AKA其他文档)对查询进行排序,尽管我不想返回它们。
author.name
的排序字段可用于请求根据name
关系的author
属性对主要数据进行排序。
E.g。 db.collection('books').find({})
返回:
[
{
type: "book",
id: "2349",
attributes: {
title: "My Sweet Book"
},
relationships: {
author: {
data: {
type: "authors",
id: "9"
}
}
}
},
{} // etc ...
]
db.collection('authors').find({id: "9"})
返回:
[
{
type: "author",
id: "9",
attributes: {
name: "Hank Moody"
}
}
]
现在我需要一些方法来做类似的事情
db.collection('books').find({}).sort({"author.name": -1})
我认为我需要将查询转换为聚合,以便我可以使用$lookup
运算符,但我不确定如何使用localField
和foreignField
。< / p>
db.collection('books').aggregate([
{$match: {}},
{$lookup: {from: "authors", localField: "attributes.author.data.id", foreignField: "id", as: "temp.author"}},
{$sort: {"$books.temp.author.name": -1}},
{$project: {temp: false}},
])
备注
attribute
还是relationship
。答案 0 :(得分:1)
您可以尝试以下聚合。
call
加入$lookup
集合,然后authors
展开$unwind
数组,以便在book_author
字段和{{{{}} {}上应用$sort
1}}排除删除name
字段(仅适用于启动Mongo 3.4版本)。对于较低版本,您必须包含要保留的所有其他字段,并在$project
阶段排除book_author
字段。
book_author