$不执行$和操作

时间:2016-09-05 11:23:46

标签: javascript node.js mongodb

我刚开始探索mongoDB。在那段时间里,我设法用以下数据创建一个简单的集合,

db.test.insert({name : "joe", age : 20});
db.test.insert({name: "james", age : 25});

现在我通过使用

查询了它
db.test.find({name : {$not : {$eq : "joe", $eq: "james"}}})

它让我得到以下结果,

{name : "joe", age : 20}

我在这里很困惑,是不是像下面这样的操作,

SELECT * FROM test where not name = "joe" and not name = "james"

Doubt1:如果是,那么上面提到的mongo查询如何被解释为普通的mysql查询? [注意:我来自mysql背景。]请解释一下。

怀疑2:还要解释以下mongo查询,

db.test.find({name : "joe", age : 20});

以上查询是否等于select * from test where name='joe' and age=20?如果不是那么它将如何被解释为正常的mysql查询?

2 个答案:

答案 0 :(得分:4)

使用{$eq : "joe", $eq: "james"}创建对象时,您使用相同的对象键两次。因此,james将覆盖joe,因为它们都使用相同的对象密钥$eq

要进行查询,您可以尝试使用NOT (name = "joe" OR name = "james")之类的内容。因此,您将OR添加到您的mongo查询中:

db.test.find({name : {$nor: [{$eq: "joe"}, $eq: "james"]}})

Reference

答案 1 :(得分:1)

我猜Christoph清除了你的疑虑。

对于SQL to Mongo Query参考,请访问this链接