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" } )

 

posted on 2017-11-01 14:54  步行者811  阅读(175)  评论(0编辑  收藏  举报

导航