未知运算符:mgo中的"$或"

Lup*_*pus 3 go mgo

我在unknown operator: $or下面的代码中遇到错误,无法找出原因.

vc := &storers.VCategory{}

err = mndb.
    C("virtualcategoryprototypes").
    Find(bson.M{
        "children":   nil,
        "deleted_by": nil,
        "indexCycleNo": bson.M{"$or": []bson.M{
            bson.M{"$exists": false},
            bson.M{"$lt": cycle}}}}).
    One(vc)
Run Code Online (Sandbox Code Playgroud)

icz*_*cza 5

$or表达是可与其自己的(并且其将利用逻辑OR连接来评价)有效的其他条件的一系列(阵列),并且结果$or表达将在逻辑与在相同的水平的其他条件的连接.

所以,你必须移动$or起来操作一个级别,其值必须是一个切片或阵列,和的元素$or会在你的情况indexCycleNo: {$exists: false}indexCycleNo: {$lt: cycle}:

err = mndb.
    C("virtualcategoryprototypes").
    Find(bson.M{
        "children":   nil,
        "deleted_by": nil,
        "$or": []bson.M{
            {"indexCycleNo": bson.M{"$exists": false}},
            {"indexCycleNo": bson.M{"$lt": cycle}},
        },
    }).
    One(vc)
Run Code Online (Sandbox Code Playgroud)