mongo c-driver bcon $ ne值不相等

时间:2017-02-14 15:45:24

标签: mongodb bson mongo-c-driver

我正在尝试向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",
            "}"
        );

2 个答案:

答案 0 :(得分:1)

您必须为UTF-8字符串指定BCON类型 小心暗示$和& 小心嵌套文档和BCON。

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

编译成此命令

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

这显然不是你想要的。

显式使用$和操作,正确键入字符串作为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" } } ] }

这可能是你想要的。

答案 1 :(得分:0)

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