MongoDB— ;如何根据匹配字段对查找进行排序?

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: "

在我的Mongo数据库中,我有两个集合-
演讲者
演讲
,我可以使用以下代码块“加入”它们(获取演讲者的演讲):

// 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
阶段(但有新查找),我收到每个演讲者的演讲稿。是的,看起来你的管道阶段的格式不正确。你能给我看看所有阶段的查询吗?这里有一个屏幕抓图的链接