1

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

2 回答 2

1

您必须为 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" } } ] }

这可能是你想要的。

于 2017-02-15T21:19:10.607 回答
0
        query = BCON_NEW ("_id", BCON_OID(&oid),
            "tribe_type", 
                "{",
                    "$ne", BCON_UTF8 ("initial-public"),
                  "}");
于 2017-02-14T19:09:52.410 回答