未知运算符:mgo 中的“$or”

unknown operator: "$or" in 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)

一个$or表达式是其他条件的一系列(数组),它们本身有效(并且将使用逻辑或连接进行评估),以及$or表达式的结果会和同级的其他条件逻辑AND连接。

所以你必须将$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)