我是mongo db的新手,并试图了解如何查询数据库。 我正在阅读此链接http://code.tutsplus.com/tutorials/getting-started-with-mongodb-part-1--net-22879
的教程按照本教程,我创建了一个简单的数据库,如下所示,
db.nettuts.insert({
first: 'matthew',
last: 'setter',
dob: '21/04/1978',
gender: 'm',
hair_colour: 'brown',
occupation: 'developer',
nationality: 'australian'
});
db.nettuts.insert({
first: 'james',
last: 'caan',
dob: '26/03/1940',
gender: 'm',
hair_colour: 'brown',
occupation: 'actor',
nationality: 'american'
});
db.nettuts.insert({
first: 'arnold',
last: 'schwarzenegger',
dob: '03/06/1925',
gender: 'm',
hair_colour: 'brown',
occupation: 'actor',
nationality: 'american'
});
db.nettuts.insert({
first: 'tony',
last: 'curtis',
dob: '21/04/1978',
gender: 'm',
hair_colour: 'brown',
occupation: 'developer',
nationality: 'american'
});
db.nettuts.insert({
first: 'jamie lee',
last: 'curtis',
dob: '22/11/1958',
gender: 'f',
hair_colour: 'brown',
occupation: 'actor',
nationality: 'american'
});
db.nettuts.insert({
first: 'michael',
last: 'caine',
dob: '14/03/1933',
gender: 'm',
hair_colour: 'brown',
occupation: 'actor',
nationality: 'english'
});
db.nettuts.insert({
first: 'judi',
last: 'dench',
dob: '09/12/1934',
gender: 'f',
hair_colour: 'white',
occupation: 'actress',
nationality: 'english'
});
并且正在尝试使用下面的查询
db.nettuts.find({gender: 'm'});
返回了所有男性演员。
当我尝试命令时
db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}]});
它回来了。
> db.nettuts.find({gender: "m", $or: [{nationality: "english"}]});
{ "_id" : ObjectId("53064b7979d90b140e53df3e"), "first" : "michael", "last" : "caine", "dob" : "14/03/1933", "gender" : "m", "hair_colour" : "brown", "occupation" : "actor", "nationality" : "english" }
>
当我尝试使用相同的命令时,这次使用“和”子句
db.nettuts.find({gender: 'm', $and: [{nationality: 'english'}]});
我获得了与使用$或
时相同的输出> db.nettuts.find({gender: "m", $and: [{nationality: "english"}]});
{ "_id" : ObjectId("53064b7979d90b140e53df3e"), "first" : "michael", "last" : "caine", "dob" : "14/03/1933", "gender" : "m", "hair_colour" : "brown", "occupation" : "actor", "nationality" : "english" }
>
所以给定这两个输出,这里的“or”子句和“and”子句之间的区别是什么。请帮我理解。
答案 0 :(得分:3)
将$or
或$and
与只有一个条目的数组一起使用是没有意义的,因为两个运算符都应用于分配给它们的数组。它们不适用于match-object的任何其他部分。
当你想找到所有男性或英语的演员时,你会这样做:
db.nettus.find({
$or: [
{ "gender": "m"},
{ "nationality": "english"}
]
});
要查找所有男性和英语的演员,您甚至不需要$和 - 运算符:
db.nettus.find({
"gender": "m",
"nationality": "english"
});
很少有情况下你真的必须使用$和 - 运算符。唯一无法替代的情况是,您需要多次将相同的运算符应用于相同的字段。在此示例中,我们选择年龄can be divided乘以3和5的所有人。
db.people.find({
$and: [
{ age: $mod [ 3, 0] },
{ age: $mod [ 5, 0] }
]
});