我是Mongo Db的新手并试图写一些查询。
我需要提取品牌价值不等于'any'或'none'或包含'not'的产品列表。
我已尝试过这个问题,但它没有用。
var query = { "BarCode": { "$exists": 1,"$not":"any" }};
但它提供的错误很少。有人可以帮助我。
谢谢,
纳雷什
答案 0 :(得分:5)
使用$ ne运算符“not equal”(http://docs.mongodb.org/manual/reference/operator/ne/#op._S_ne):
var query = { "BarCode": { "$exists": 1, "$ne": "any" }};
所以完整的查询可能如下所示:
var query = { "Barcode": { "$exists": 1, "$nin": [ "any", "none"], "$not": /not/ }}
$ nin运算符(“not in”)选择字段值不是指定值之一的文档(请参阅http://docs.mongodb.org/manual/reference/operator/nin/#op._S_nin)。 $ not运算符在正则表达式运算符上执行逻辑NOT(请参阅http://docs.mongodb.org/manual/reference/operator/regex/#op._S_regex)。如果字段不应包含单词“not”,请使用更复杂的正则表达式。请记住,此查询不会使用任何索引,因为正则表达式不以^
开头。
答案 1 :(得分:1)
请使用此URL,其中包含从SQL到mongoDB查询的映射:http://docs.mongodb.org/manual/reference/sql-comparison/ 对于您的解决方案,这将有效。对于带有多个数组的NOT IN,请使用$ nin
SELECT * FROM users WHERE status != "A" => db.users.find({ status: { $ne: "A" } } )
答案 2 :(得分:0)
如果您想使用RegEx匹配对多个字符串执行操作,请使用以下代码。
$matchStr = array( new MongoRegex('/school/i'), new MongoRegex('/college/i') );
$whereCondition = array(
'name' => array('$nin' => $matchStr),
'name' => array('$exists' => 1)
);
$response = $this->Collection->find($whereCondition);
本规范将提供所有输出响应,其中没有学校或大学字样。它对我来说很完美。