我在 mongodb 中有以下查询:

db.devices.aggregate({
$match: {userId: "v73TuQqZykbxFXsWo", state: true}},
{
  $project: {
    userId: 1,
    categorySlug: 1,
    weight: {
      $cond: [
        {"$or": [
          {$eq: ["$categorySlug", "air_fryer"] },
          {$eq: ["$categorySlug", "iron"] }
        ] },
      0, 1] }
    } },
    {$sort: {weight: 1}},
    { $limit : 10 }
);
我正在尝试使用 mgo 驱动程序在 Go 中编写它,但根本无法解决这个问题!
如何将其转换为 Go mgo 查询?

最佳答案

文档上的示例足以入门。但是,如果您不熟悉 golang,那么 $cond 部分可能会有点棘手。请参阅下面的示例代码:

    collection := session.DB("dbName").C("devices")

    stage_match := bson.M{"$match":bson.M{"userId":"v73TuQqZykbxFXsWo", "state": true}}

    condition_weight := []interface{}{bson.M{"$or": []bson.M{
                       bson.M{"$eq": []string{"$categorySlug", "air_fryer"}},
                       bson.M{"$eq": []string{"$categorySlug", "iron"}},
    }}, 0, 1}

    stage_project:= bson.M{"$project": bson.M{"userId":1, "categorySlug":1, "weight": condition_weight}}

    stage_sort := bson.M{"$sort": bson.M{"weight":1}}

    stage_limit := bson.M{"$limit": 10}

    pipe := collection.Pipe([]bson.M{stage_match, stage_project, stage_sort, stage_limit})

另见 mgo: type Pipe

关于mongodb - 使用 mgo 驱动程序进行 mongo 聚合查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40259171/

10-10 00:22