mongo c-driver bcon $ne 值不相等

mongo c-driver bcon $ne value no equal

我正在尝试向我的 BCON 查询附加一个要求,其中 'tribe_type' 不等于 'initial-public'。

我的原始代码是并且有效:

 query = BCON_NEW ("_id", BCON_OID(&oid));

当我添加第二部分时,它编译,但是 mongo 匹配失败。

        query = BCON_NEW ("_id", BCON_OID(&oid),
            "{",
                "tribe_type",
                "$ne",
                "initial-public",
            "}"
        );
        query = BCON_NEW ("_id", BCON_OID(&oid),
            "tribe_type", 
                "{",
                    "$ne", BCON_UTF8 ("initial-public"),
                  "}");

您必须为 UTF-8 字符串指定 BCON 类型。
小心隐含的 $and's 小心嵌套文档和 BCON。

    query = BCON_NEW ("_id", BCON_OID(&oid),
        "{",
            "tribe_type",
            "$ne",
            "initial-public",
        "}"
    );

编译成这个命令

 { "_id" : <an oid> }, { "tribe_type" : "$ne" }

这显然不是你想要的。

明确 $and 操作,将字符串正确键入为 UTF8 字段,并确保像这样捕获嵌套文档:

query = BCON_NEW (
                "$and", "[", "{", "_id", BCON_OID(&oid), "}",
                             "{", "tribe_type", "{", "$ne", BCON_UTF8 ("initial-public"), "}", "}","]"
                );

生成如下所示的查询

{ "$and" : [ { "_id" : <an oid> }, { "tribe_type" : { "$ne" : "initial-public" } } ] }

这可能就是您想要的。