我正在寻找一种基于文档ID数组用Mongoose查询数据库并按结果在该数组中将其显示给Mongoose的顺序返回结果的方法。
例如,如果我为Mongoose提供了此数组fromBackendKey 5
并假设所有具有这些ID的文档都存在,则结果将是一系列文档,其顺序为:["112", "111", "113"]
为了明确起见,我不需要按任何特定的文档字段对数组进行排序-我正在寻找一种方法来告诉Mongoose按条件数组本身中显示的ID的顺序进行排序。这可能吗?
答案 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" }