按猫鼬提供的条件数组中的项目顺序对查询结果进行排序

时间:2018-12-06 08:12:46

标签: mongodb express mongoose

我正在寻找一种基于文档ID数组用Mongoose查询数据库并按结果在该数组中将其显示给Mongoose的顺序返回结果的方法。

例如,如果我为Mongoose提供了此数组fromBackendKey 5 并假设所有具有这些ID的文档都存在,则结果将是一系列文档,其顺序为:["112", "111", "113"]

为了明确起见,我不需要按任何特定的文档字段对数组进行排序-我正在寻找一种方法来告诉Mongoose按条件数组本身中显示的ID的顺序进行排序。这可能吗?

1 个答案:

答案 0 :(得分:0)

考虑以下数据:

db.col.save({ a: "111"})
db.col.save({ a: "112"})
db.col.save({ a: "113"})
db.col.save({ a: "114"})

您可以使用Aggregation Framework的$match过滤掉指定数组中不存在的所有项目,并使用$addFields过滤$indexOfArray以获得index属性。然后,您可以通过该属性$sort,并使用$project删除临时字段。试试:

db.col.aggregate([
    {
        $match: { a: { $in: ["112", "111", "113"] } }
    },
    {
        $addFields: {
            index: { $indexOfArray: [ ["112", "111", "113"], "$a" ] }
        }
    },
    {
        $sort: { index: 1 }
    },
    {
        $project: { index: 0, _id: 0 }
    }
])

输出:

{ "a" : "112" }
{ "a" : "111" }
{ "a" : "113" }