MongoDB— ;如何根据匹配字段对查找进行排序?
在我的Mongo数据库中,我有两个集合-MongoDB— ;如何根据匹配字段对查找进行排序?,mongodb,aggregation-framework,Mongodb,Aggregation Framework,在我的Mongo数据库中,我有两个集合-演讲者和演讲,我可以使用以下代码块“加入”它们(获取演讲者的演讲): // I've already found the 'speaker' in the database db.collection('speakers').aggregate([{ $match: { "uuid": speaker.uuid } }, { $lookup: { from: "speeches", localField: "
演讲者
和演讲
,我可以使用以下代码块“加入”它们(获取演讲者的演讲):
// I've already found the 'speaker' in the database
db.collection('speakers').aggregate([{
$match: { "uuid": speaker.uuid } },
{ $lookup: {
from: "speeches",
localField: "uuid",
foreignField: "speaker_id",
as: "speeches" } }
]).toArray();
它工作得很好,但我想按日期
字段或标题
字段对演讲数组进行排序,但我所做的一切似乎都无法实现。我在这里看到的例子都没有达到我所需要的效果。我尝试在$lookup
块之后添加{$sort:{“speech.title”:-1}}
,但没有任何效果。这是可能的吗?您可以使用3.6中提供的以下管道变体
{"$lookup":{
"from":"speeches",
"let":{"uuid":"$uuid"},
"pipeline":[
{"$match":{"$expr":{"$eq":["$$uuid","$speaker_id"]}}},
{"$sort":{"title":1}}
],
"as":"speeches"
}}
你的mongo版本是什么?它是4.0.1版本。这肯定是可行的,但它能为所有发言人提供所有演讲。我正在尝试为一个演讲者做演讲,我已经在数据库中找到了。如何使用特定的
speaker.uuid
来限制查找?只需使用此查找替换查找阶段即可。休息吧,一切照旧。那我一定是做错了什么。我得到的扬声器如下:var speaker=db.collection('speakers').findOne({full_name:'speaker name})
如果我将$match:{“uuid”:speaker.uuid},
阶段留在(新查找之前),我会收到一个错误,说MongoError:pipeline阶段规范对象必须只包含一个字段。
没有上面的$match
阶段(但有新查找),我收到每个演讲者的演讲稿。是的,看起来你的管道阶段的格式不正确。你能给我看看所有阶段的查询吗?这里有一个屏幕抓图的链接