MongoDB基本操作-查询文档(上)

Posted Buddy Yuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB基本操作-查询文档(上)相关的知识,希望对你有一定的参考价值。

       文档就像关系型数据库里面的行,当插入了这些行之后,我们需要查询相关的文档,MongoDB提供了db.collection.find()方法来进行文档的查询。而该方法有两个参数。query filterprojection

Query filter,在MongoDB当中使用下列表达式来进行文档过滤。这个就类似于关系型数据库当中的where条件。

{

<field1>: <value1>,<field2>:{<operator>: <value> },

...

}

       Projection,在MongoDB当中使用下列表达式进行字段过滤。这个就类似于关系型数据库当中的select col1,col2 from tab。而这样可以限制返回给客户端的数据量。

{ field1: <value>, field2:<value> ...

Value1或者是true,这个字段就会被返回;

Value0或者是false,这个字段就会被剔除。
首先在查询之前,我们先弄一批示例数据,示例采用了官方文档的数据。

db.users.insertMany(

[

{_id: 1,name: "sue",age:19,type: 1,status:"P",favorites: { artist: "Picasso",food: "pizza"},finished: [ 17, 3 ],badges: [ "blue","black" ],points: [{points: 85, bonus: 20 },{ points: 85, bonus: 10}]},

{_id: 2,name: "bob",age:42,type: 1,status:"A",favorites: { artist: "Miro", food:"meringue"},finished: [ 11, 25 ],badges: [ "green"],points: [{ points: 85,bonus: 20 },{ points: 64, bonus: 12 }]},

{_id: 3,name: "ahn",age:22,type: 2,status:"A",favorites: { artist: "Cassatt",food: "cake"},finished: [ 6 ],badges: [ "blue","red" ],points: [{points: 81, bonus: 8 },{ points: 55, bonus: 20}]},

{_id: 4,name: "xi",age:34,type: 2,status:"D",favorites: { artist: "Chagall",food:"chocolate" },finished: [ 5, 11 ],badges: ["red","black" ],points: [{ points: 53, bonus: 15 },{points: 51, bonus: 15}]},

{_id: 5,name: "xyz",age:23,type: 2,status:"D",favorites: { artist: "Noguchi",food: "nougat"},finished: [ 14, 6 ],badges: [ "orange"],points: [{ points: 71,bonus: 20 }]},

{_id: 6,name: "abc",age:43,type: 1,status:"A",favorites: { food: "pizza", artist:"Picasso"},finished: [ 18, 12 ],badges: [ "black","blue" ],points:[{ points: 78, bonus: 8 },{ points: 57, bonus: 7 }]}

]

)

执行完示例数据后,我们创建了users集合,并往集合当中插入了6条数据。接下来我们就用这部分示例数据演示各种查询操作。

1.查询全部文档

我们使用db.users.find( {} )方法来查看集合users下的全部文档信息。而当中的{}代表了空的过滤条件。同样我们也可以使用db.users.find()来查询全部文档,这两个命令是等价的。

2.指定查询过滤条件

等值条件:{<field1>: <value1>, ... }

例:查询集合usersnamebob的文档。就可以使用下列查询

> db.users.find({name:"bob"} )

操作符operator{<field1>: { <operator1>:<value1> }, ...

例:查询集合usersnamebobxi的文档,使用下列查询,相当于关系型数据库当中的in

db.users.find({name:{$in:["bob","xi"]}} );

例:查询集合usersname不等于bobxi的文档,使用下列查询,相当于关系型数据库当中的notin

db.users.find( {name:{$nin:["bob","xi"]}});

这类表达式还有小于$lt、小于等于$lte、大于$gt,大于等于$gte,不等于$ne

例子:查询集合usersage大于20的文档,使用下列查询,相当于关系型数据库当中的>

db.users.find( {age:{$gt:30}} );

使用AND

例:查询集合usersstatusA,同时age大于30的。使用下列查询,相当于关系型数据库当中的and

db.users.find( { status: "A",age: { $lt: 30 } } )

使用OR

例:查询集合usersstatusA,或者age大于30的。使用下列查询,相当于关系型数据库当中的or

db.users.find( { $or:[ {status: "A"},{age:{$lt:30}}]} )

使用ANDOR

例:查询集合usersstatusA,同时age大于30的或者type1的。使用下列查询,相当于关系型数据库当中的andor

db.users.find( { status:"A",$or:[{age:{$lt:30}},{type:1}] } )

 


以上是关于MongoDB基本操作-查询文档(上)的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB——文档操作(查询文档)

MongoDB基本操作-查询文档(下)

MongoDB文档查询操作

Spring Data MongoDB 三:基本文档查询(QueryBasicQuery)

MongoDB各种查询操作详解

MongoDB——MongoDB安装+增删改查操作