Mongodb 返回文件的顺序是什么?

Mongodb 返回文件的顺序是什么?,mongodb,mongodb-query,Mongodb,Mongodb Query,我有一个集合,我执行以下查询: db.getCollection("test").find( {"$or":[{_id:NumberLong("1234")}, {_id:NumberLong("1230")}, {_id:NumberLong("1237")}, {_id:NumberLong("1236")}} ) 按顺序将是返回的文档?我需要这个确切的顺序(with是$或语句的顺序): 通常情况下,这是我在执行上一个查询时看到的顺序,但今天

我有一个集合,我执行以下查询:

db.getCollection("test").find(
{"$or":[{_id:NumberLong("1234")},
        {_id:NumberLong("1230")},
        {_id:NumberLong("1237")},
        {_id:NumberLong("1236")}}
)
按顺序将是返回的文档?我需要这个确切的顺序(with是
$或
语句的顺序):

通常情况下,这是我在执行上一个查询时看到的顺序,但今天我看到一个查询返回了不同的顺序(这只是一次,因为在我重新启动服务器后,顺序再次正常)。那么,如何才能准确地获得我需要的顺序呢?

您必须使用以确保结果按您想要的顺序返回。由于您的模型中没有“排序”字段的自然候选字段,因此您可以使用并添加临时字段,仅用于
$sort
目的。可以使用运算符对其进行求值。您也可以使用该字段进行筛选(
$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 }
    }
])

除非您明确说明,否则无法保证;除非另有说明,否则将以任何顺序显示。您可以在文档库中阅读有关订购选项的信息。谢谢mickl,使用addFields是个好主意!
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 }
    }
])