返回文档的顺序是什么?

时间:2018-07-20 21:46:06

标签: mongodb mongodb-query

我有一个收藏夹,我执行以下查询:

db.getCollection("test").find(
{"$or":[{_id:NumberLong("1234")},
        {_id:NumberLong("1230")},
        {_id:NumberLong("1237")},
        {_id:NumberLong("1236")}}
)

将按顺序退回文件?我需要这个确切的顺序($or语句的顺序):

1234
1230
1237
1236

通常这是我执行上一个查询时看到的顺序,但是今天我看到一个查询返回了一个不同的顺序(这只是一次,因为在我重新启动服务器后,该顺序又恢复了)。那么该怎么做才能准确确定我需要的订单呢?

1 个答案:

答案 0 :(得分:1)

您必须使用$sort来确保按所需顺序返回结果。由于您的模型中没有自然的“排序”字段候选者,因此您可以使用$addFields并仅出于$sort的目的添加临时字段。可以使用$indexOfArray运算符对其进行评估。您也可以使用该字段进行过滤(如果不匹配,$indexOfArray返回-1

db.test.aggregate([
    {
        $addFields: {
            order: { $indexOfArray: [ [NumberLong("1234"), NumberLong("1230"), NumberLong("1237"), NumberLong("1236") ], "$_id" ] }
        }
    },
    {
        $match: { order: { $ne: -1 } }
    },
    {
        $sort: { order:1 }
    },
    {
        $project: { order: 0 }
    }
])