欢迎投稿

今日深度:

MongoDB学习 (六):查询

MongoDB学习 (六):查询


    • " 、""、 ""、 ""、""、""、""、""、
    • "、""、""、""、""、""、""、""、""


  查询集合中文档并返回结果为游标的文档集合。


 
: 匹配查询条件的文档集合的游标. 如果指定投影参数,查询出的文档返回指定的键 ,"_id"键也可以从集合中移除掉。 
:在mongo shell中我们不需要JavaScript游标处理方法就可以直接访问作为查询结果的文档集合。mongo shell默认返回游标中的前条文档。当执行查询操作时,mongo shell直接自动的对游标执行迭代操作并显示前20条文档。输入"it"显示接下来的20条文档。



db.collection.find({})


db.user.find({age:
dbContext.user.(p=>p.age==)


db.user.find({age:,sex:
dbContext.user.(p=>p.age==&&p.sex==
SELECT * FROM user WHERE age= AND sex=

, })

, , })

或者则是查询结果中显示的键;若值为或者,则为不显示键。文档中的键若在参数中没有指定,查询结果中将不会显示(_id例外)。这样我们就可以灵活显示声明来指定返回的键。

   store  soldnumstocknum

 

 : 
> db.store.find ({ : })

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


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


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


" 、""、 ""、 ""(分别对应">"、 ">=" 、"<" 、"<="),组合起来进行范围的查找。例如查询年龄为16-18岁(包含16但不含18)的用户:

 ,$lt:} } 

"来进行"不相等"操作。例如查询年龄不为18岁的用户:

} } 

 Date(>    db.users.find({ : { : start}})

"判断键值是否为null,""判定集合中文档是否包含该键。


{:,:,::,:,::,:,:
db.users.find({sex:{$:[],$exists:
db.users.find({birthday:{$:[],$exists: }})

})

})

这种格式。




"appliances", "school", "book" ]

"$all"对应的数组只有一个值,那么和直接匹配这个值效果是一样的。


db.inventory.find( { amount: {$all:[5050}} )
语法指定下标,例如下面查询出tags键值数组中第2个元素为"school"的文档:


   



",tags键值数组包含四个元素,所以不匹配查询条件。查询结果:


db.collection.update({ $push : {field: value}, $inc :{count : 1
db.collection.find({count : {$gt:2}})

  

: [<value1>, <value2>, ... <valueN> ] } }

  

或者键值不等于指定数组的任意值的文档。类似sql中not in(SQL中字段不存在使用会有语法错误).


: [ 16, 50 ] } } )

db.inventory.find( { amount: { $nin: [ 16, 50db.inventory.find( { qty: { $nin: [ 16, 50 ] } } )

"$in"对应的数组只有一个值,那么和直接匹配这个值效果是一样的。


db.inventory.find( { amount: {$:[}} )

 




 db.inventory.find({ name: "t1" , amount: { $lt:50 }} )



表达式中指定的键,表达式值为; false nor false 等于 true,所以查询结果返回集合中所有文档:

 }, { qty: { $lt: 50 } } ] } )

)。


 } } } ) 

无法匹配表示,所以返回集合所有文档数据。

 



   

"判定集合中文档是否包含该键)。

> } }


db.inventory.find( { qty: { $exists: 
db.inventory.find( { amount: { $exists: , $nin: [ 16, 58 ] } } )


{"name":"t4","amount":,"tags":[ "bag", "school", "book"
db.inventory.find( { amount: { $exists: 
db.inventory.find( { amount: { $exists:  } } )

  




返回结果怎么不一样。因为有一条文档的amount键值为,javascript中null进行,会返回""。所以该条文档匹配$where操作符求模式了表达式。当文档中字段值不存在null,就可以使用$mod替代$where的表达式.

我们可以使用正则表达式对象或者$regex操作符来执行正则匹配:


db.inventory.find( { name: /.4/'.4', $options: 'i' } } );


db.fruit.insert({"apple":1, "banana": 4, "peach" : 4"apple":3, "banana": 3, "peach" : 4})


db.fruit.find( { $where: "this.banana == this.peach""obj.banana == obj.peach"
db.fruit.find( { $where: () {  (.banana == () {  obj.banana == obj.peach; } } )

 ( current   ( other   (current != other && [current] ==   

我们尽量避免使用"$Where"査询,因为它们在速度上要比常规査询慢很多。每个文档都要从BSON转换成JavaScript对象,然后通过"$where"的表达式来运行;同样还不能利用索引。


" 指定键名和键值选择出文档集合,并且该文档集合中指定返回从指定数量的元素。如果count的值大于数组中元素的数量,该查询返回数组中的所有元素的。


db.posts.find( {}, { comments: { $slice: 5
db.posts.find( {}, { comments: { $slice: -5 } } );

,其中第一个值表示在数组中跳过的项目数,第二个值表示返回的项目数。


db.posts.find( {}, { comments: { $slice: [ 20, 10
db.posts.find( {}, { comments: { $slice: [ -20, 10 ] } } );



www.htsjk.Com true http://www.htsjk.com/shujukunews/218.html NewsArticle MongoDB学习 (六):查询 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 查询集合中文档并返回结果为游标的文档集合。 : 匹配查询条件的文档集合的游标. 如果指定投影参数,查询出的...

评论暂时关闭