如何在官方Go MongoDB驱动程序中使用逻辑查询选择器($or)执行FindOne()?

如何在官方Go MongoDB驱动程序中使用逻辑查询选择器($or)执行FindOne()?,mongodb,go,mongo-go,Mongodb,Go,Mongo Go,我是一名围棋初学者。我正在尝试查找一个将匹配“用户名”或电子邮件的文档。但无法找到实现此条件的方法进行筛选 以下是我的文档模型: type User struct { Username string `json:"username" bson:"username"` Email string `json:"email" bson:"email"` Password st

我是一名围棋初学者。我正在尝试查找一个将匹配
“用户名”
电子邮件的文档。但无法找到实现此条件的方法进行筛选

以下是我的文档模型:

type User struct {
    Username  string    `json:"username" bson:"username"`
    Email     string    `json:"email" bson:"email"`
    Password  string    `json:"password" bson:"password"`
    CreatedAt time.Time `json:"created_at" bson:"created_at"`
    UpdatedAt time.Time `json:"updated_at" bson:"updated_at"`
}
以及查询:

filter := bson.D{
   {"username", user.Username},
   {"$or": {"email", user.Email}},
}

err = userCollection.FindOne(context.TODO(), filter).Decode(&user)

您应该使用
$或$
,如下所示:

filter := bson.D{
   {"$or":[{"username": user.Username},{"email": user.Email}]},}


最后这个方法对我有效

filter := bson.D{{
        "$or",
        bson.A{
            bson.D{
                {"username", user.Username},
            },
            bson.D{
                {"email", user.Email},
            },
        },
    }}
有关构造命令的一些信息:

  • D:BSON文档。此类型应在订单重要的情况下使用,例如MongoDB命令。
  • M:一张无序的地图。它与D相同,只是不保留顺序。
  • A:BSON阵列。
  • E:D中的单个元素。

它抛出一个语法错误:意外{,应为表达式
。在末尾添加分号