我正在使用Mongodb go驱动程序,仍然在想如何聚合。
我的问题是,是否使用[] bson.M作为管道,如以下代码所示:

    collection.Aggregate(
    ctx,
    []bson.M{
        bson.M{
            "$match": filter,
        },
        bson.M{
            "$sort": sort,
        },
    },
)
可以确定匹配始终是排序之前的第一吗?我应该改用mongo.Pipeline([] bson.D)来保持100%的订单吗?谢谢

最佳答案

[]bson.M是一个 slice ,并且 slice 确实保持顺序。 $match将始终放在第一位,$sort作为第二位。bson.M是一个映射,因此,如果其中包含多个元素(键-值对),则不会保持其内部顺序。
您可以使用对您来说更方便的任何一种([]bson.M[]bson.Dmongo.Pipeline)。
当订单在单个文档中很重要时,您必须使用bson.D,例如在按多个字段排序时。有关详细信息,请参见bson.D vs bson.M for find queries

关于mongodb - mongodb go driver中维护了bson.M数组的顺序吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/66272948/

10-16 20:57