mongoVUE查询二

1.假设有如下记录:

{ "_id" : ObjectId("51d7b0d436332e1a5f7299d6"), "name" : { "first" : Barack", "last" : "Obama" } }

要查出first为Barack,last为Obama的这条记录

通过点表示法,精确表示内嵌文档的键

db.profile.find({  "name.first" : "Barack" , "name.last" : "Obama"});


2.更复杂的情况,值为数组时,用$elemMatch操作符,例如:

{

        "content" : ".....",

        "comment" : [

                {

                        "author" : "zhangsan",

                        "score" : 3,

                        "comment" : "shafa!"

                },

                {

                        "author" : "lisi",

                        "score" : 5,

                        "comment" : "lzsb!"

                }

        ]

}

要查询author为zhangsan,score为3的记录,

如果用{"comment.author":"zhangsan", "comment.score":{"$gte":4}}也会打印出这条,这不是我们想要的,可以理解为分别取author,score的值,并不是同一个人的值,才造成这种结果

用$elemMatch去固定到一个元素的值,

执行:db.blogs.find({"comment":{"$elemMatch":{"author":"zhangsan","score":{"$gt":4}}}}),没有返回结果,

执行db.blogs.find({"comment":{"$elemMatch":{"author":"zhangsan","score":{"$gt":2}}}}),显示一条结果。


3.键值为null值查询操作

{sex:{$in:[null],$exists:true}},查询存在sex字段,并且为[null]值的记录

{sex:null},查询sex字段为空的记录,包括不存在sex字段的记录

4.  $all,匹配那些指定键的键值中包含数组,而且该数组包含条件指定数组的所有元素的文档,数组中元素顺序不影响查询结果。


 语法:{ field: { $all: [ <value> , <value1> ... ] }


 记录:{"name":"t2","amount":50,"tags":[ "appliances", "school", "book" ]}

查询第二个元素为school的记录

db.inventory.find({"tags.1":"school"})

5. $size  ,用其查询指定长度的数组。

语法:{field: {$size: value} }

{tags: {$size: 3} },查询tags字段包含3个元素的记录

6.$or,$in,$nor,$nin

{"name":{"$in":["zhangsan","Mike"]}},查询名称为zhangsan,或Mike的记录

{"$or":{"name":"zhangsan"},{"age":12}}


7.正则表达式,模糊查询

{"name":/Mike?/i},返回名称为Mike或Mike1的记录

往数组中加入元素

{"$push":{"ziliao":"weight"}}

$slice,取数组的前几个元素

8,删除字段,$unset,用于update操作,

9.查询指定类型的字段,$type

{"date":{"$type":18}}    查询date字段为Int64的记录

{"date":{"$type":9}}     查询date字段为Date的记录

附:bson和id对照表

mongoVUE查询二


你可能感兴趣的:(mongoVUE查询二)