MongoDB基本操作-查询文档(上)
Posted Buddy Yuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB基本操作-查询文档(上)相关的知识,希望对你有一定的参考价值。
文档就像关系型数据库里面的行,当插入了这些行之后,我们需要查询相关的文档,MongoDB提供了db.collection.find()方法来进行文档的查询。而该方法有两个参数。query filter和projection。
Query filter,在MongoDB当中使用下列表达式来进行文档过滤。这个就类似于关系型数据库当中的where条件。
{
<field1>: <value1>,<field2>:{<operator>: <value> },
...
}
Projection,在MongoDB当中使用下列表达式进行字段过滤。这个就类似于关系型数据库当中的select col1,col2 from tab。而这样可以限制返回给客户端的数据量。
{ field1: <value>, field2:<value> ...
Value为1或者是true,这个字段就会被返回;
Value为0或者是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>, ... }
例:查询集合users中name为bob的文档。就可以使用下列查询
> db.users.find({name:"bob"} )
操作符operator:{<field1>: { <operator1>:<value1> }, ...
例:查询集合users中name为bob和xi的文档,使用下列查询,相当于关系型数据库当中的in。
db.users.find({name:{$in:["bob","xi"]}} );
例:查询集合users中name不等于bob和xi的文档,使用下列查询,相当于关系型数据库当中的notin。
db.users.find( {name:{$nin:["bob","xi"]}});
这类表达式还有小于$lt、小于等于$lte、大于$gt,大于等于$gte,不等于$ne。
例子:查询集合users中age大于20的文档,使用下列查询,相当于关系型数据库当中的>。
db.users.find( {age:{$gt:30}} );
使用AND
例:查询集合users中status为A,同时age大于30的。使用下列查询,相当于关系型数据库当中的and。
db.users.find( { status: "A",age: { $lt: 30 } } )
使用OR
例:查询集合users中status为A,或者age大于30的。使用下列查询,相当于关系型数据库当中的or。
db.users.find( { $or:[ {status: "A"},{age:{$lt:30}}]} )
使用AND和OR
例:查询集合users中status为A,同时age大于30的或者type为1的。使用下列查询,相当于关系型数据库当中的and加or。
db.users.find( { status:"A",$or:[{age:{$lt:30}},{type:1}] } )
以上是关于MongoDB基本操作-查询文档(上)的主要内容,如果未能解决你的问题,请参考以下文章