Search code examples
mongodbgobsonmongo-go

Is order of array of bson.M maintained in mongodb go driver?


I'm using Mongodb go driver and still figuring out how to aggregate. My question is, if I use []bson.M as pipelines as shown by the code below:

    collection.Aggregate(
    ctx,
    []bson.M{
        bson.M{
            "$match": filter,
        },
        bson.M{
            "$sort": sort,
        },
    },
)

Is it certain that the match is always first before the sort? Should I switch to mongo.Pipeline ([]bson.D) instead for 100% maintained order? thanks


Solution

  • []bson.M is a slice, and slices do maintain order. $match will always be taken first, and $sort as second.

    bson.M is a map, so if you have multiple elements (key-value pairs) in it, order inside it is not maintained.

    You may use whichever is more convenient for you ([]bson.M or []bson.D or mongo.Pipeline).

    You must use bson.D when order is important inside a single document, e.g. when sorting by multiple fields. For details, see bson.D vs bson.M for find queries.