MongoDB的查询
查询:
方式一:
find()
>db.collectionName.find(document)
find()方法将以非结构化的方式显示所有文档。
比如:
> db.mycollection.find()
{ "_id" : 101, "title" : "MongoDB Guide", "description" : "MongoDB is no sql database", "by" : "yiibai tutorials", "url" : "http://www.yiibai.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
{ "_id" : 102, "title" : "NoSQL Database", "description" : "NoSQL database doesn't have tables", "by" : "yiibai tutorials", "url" : "http://www.yiibai.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 210, "comments" : [ { "user" : "user1", "message" : "My first comment", "dateCreated" : ISODate("2017-12-10T10:35:00Z"), "like" : 0 } ] }
{ "_id" : 104, "title" : "Python Quick Guide", "description" : "Python Quick start ", "by" : "yiibai tutorials", "url" : "http://www.yiibai.com", "tags" : [ "Python", "database", "NoSQL" ], "likes" : 30, "comments" : [ { "user" : "user1", "message" : "My first comment", "dateCreated" : ISODate("2018-12-10T10:35:00Z"), "like" : 590 } ] }
pretty()
pretty()方法将以格式化的方式显示所有文档。
>db.mycol.find().pretty()
比如:
> db.mycollection.find().pretty()
{
"_id" : 101,
"title" : "MongoDB Guide",
"description" : "MongoDB is no sql database",
"by" : "yiibai tutorials",
"url" : "http://www.yiibai.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
{
"_id" : 102,
"title" : "NoSQL Database",
"description" : "NoSQL database doesn't have tables",
"by" : "yiibai tutorials",
"url" : "http://www.yiibai.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 210,
"comments" : [
{
"user" : "user1",
"message" : "My first comment",
"dateCreated" : ISODate("2017-12-10T10:35:00Z"),
"like" : 0
}
]
}
还有findOne()方法,只返回一行
> db.mycollection.findOne()
{
"_id" : 101,
"title" : "MongoDB Guide",
"description" : "MongoDB is no sql database",
"by" : "yiibai tutorials",
"url" : "http://www.yiibai.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
$lt 表示范围
等于 {<key>:<value>} db.mycol.find({"by":"yiibai"}).pretty()
小于 {<key>:{$lt:<value>}} db.mycol.find({"likes":{$lt:50}}).pretty())
小于等于 {<key>:{$lte:<value>}} db.mycol.find({"likes":{$lte:50}}).pretty()
大于 {<key>:{$gt:<value>}} db.mycol.find({"likes":{$gt:50}}).pretty()
大于等于 {<key>:{$gte:<value>}} db.mycol.find({"likes":{$gte:50}}).pretty()
不等于 {<key>:{$ne:<value>}} db.mycol.find({"likes":{$ne:50}}).pretty()
mongodb中如果用逗号 , 分开传递多个键,则视为 and 条件
语法:
>db.mycol.find(
{
$and: [ {key1: value1}, {key2:value2} ]
}
).pretty()
比如:
> db.mycol.find({$and:[{"by":"yiibai tutorials"},{"title": "MongoDB Overview"}]}).pretty()
可以在find子句中传递任意数量的键值。
or 条件
>db.mycol.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty()
and和or条件一起的
以下示例将显示likes大于10以及标题是“MongoDB Overview”或者“yiibai tutorials”的所有文档。 等价SQL where子句为
SELECT * FROM mycol where likes> 10 AND(by ='yiibai tutorials' OR title ='MongoDB Overview');
>db.mycol.find({"likes": {$gt:10}, $or: [{"by": "yiibai tutorials"}, {"title": "MongoDB Overview"}]}).pretty()
查询嵌入、嵌套文档
匹配嵌入、嵌套文档
要在作为嵌入/嵌套文档的字段上指定相等条件,请使用查询过滤器文档{<field>:<value>},其中<value>是要匹配的文档。
db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } ) 如果是嵌套,嵌套的字段一定要完整,不能漏掉一个字段
整个嵌入式文档中的相等匹配需要精确匹配指定的<value>文档,包括字段顺序。 如果是嵌套,嵌套的字段一定要完整,不能漏掉一个字段
例如,以下查询选择字段size等于{ h: 14, w: 21, uom: "cm" }的所有文档:
db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } )
Shell
整个嵌入式文档中的相等匹配需要精确匹配指定的<value>文档,包括字段顺序。
例如,以下查询与库存(inventory)集合中的任何文档不匹配:
db.inventory.find( { size: { w: 21, h: 14, uom: "cm" } } )
查询嵌套字段:
db.inventory.find( { "size.uom": "in" } )
使用查询运算符指定匹配:
{ <field1>: { <operator1>: <value1> }, ... }
以下查询使用size字段中嵌入的字段h中的小于运算符($lt):
db.inventory.find( { "size.h": { $lt: 15 } } )
指定and条件
以下查询选择嵌套字段h小于15的所有文档,嵌套字段uom等于“in”,status字段等于“D”:
db.inventory.find( { "size.h": { $lt: 15 }, "size.uom": "in", status: "D" } )