MongoDb 查询详解

版权声明:本文为博主原创文章,转载请注明原文出处! https://blog.csdn.net/qq_23375733/article/details/82730738

1、简单的基本查询

db.inventory.insertMany([
   { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
   { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
]);

db.inventory.find({})     //查询返回集合中的所有文档
db.inventory.findOne({})  //查询返回单个文档
db.inventory.find( { status: { $in: [ "A", "D" ] } } )   //查询status等于"A"或"D"的文档
!注意:虽然您可以使用$or运算符表达此查询,但在对同一字段执行相等性检查时,请使用$in运算符而不是$or运算符。
db.inventory.find( { status: "A", qty: { $lt: 30 } } )   //查询status等于"A", 并且qty小于30的文档
//查询status等于"A", 并且qty小于30或者item的值以p开头的文档
db.inventory.find( { status: "A", $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ] } )

2、查询嵌入/嵌套文档 、查询数组

要在嵌入/嵌套文档中的字段上指定查询条件,请使用点表示法

(使用点表示法,您可以为数组的特定索引或位置处的元素指定查询条件。该数组使用从零开始的索引)

!注意:使用点表示法查询时,字段和嵌套字段必须在引号内。 

db.inventory.insertMany([
   { item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ], 
size: { h: 14, w: 21, uom: "cm" } },
   { item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ]
, size: { h: 8.5, w: 11, uom: "in" } },
   { item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ]
, size: { h: 8.5, w: 11, uom: "in" } },
   { item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ]
, size: { h: 22.85, w: 30, uom: "cm" } },
   { item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ]
, size: { h: 10, w: 15.25, uom: "cm" } }
]);

db.inventory.find( { "size.uom": "in" } )   //查询size对象中的uom字段等于"in"的文档
db.inventory.find( { "size.h": { $gt: 15 } } )   //查询size对象中的h字段大于15的文档
db.inventory.find( { tags: "red" } )   //查询tags数组中"red"作为其元素之一的文档
db.inventory.find( { tags: { $all: ["red", "blank"] } } )   //查询tags数组中的元素为"red"或"blank"的文档
//查询dim_cm数组中一个元素可以满足大于15条件并且另一个元素可以满足小于20条件,或者单个元素可以满足两个的文档
db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )   
//查询dim_cm数组中至少包含一个大于22和小于30的文档
db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )   
db.inventory.find( { "dim_cm.1": { $gt: 25 } } )   //查询dim_cm数组中第二个元素大于25的文档
db.inventory.find( { "tags": { $size: 3 } } )   //查询tags数组的长度为3的文档

3、查询嵌入式文档数组

db.inventory.insertMany( [
   { item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },
   { item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },
   { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] },
   { item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },
   { item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);

//查询instock数组中的warehouse为"A"的并且qty为5的文档  #注意这种查询是完全匹配的,包括字段顺序也要一样
db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )  
//查询instock数组中,qty字段等于5并且warehouse字段等于A的文档
db.inventory.find( { "instock": { $elemMatch: { qty: 5, warehouse: "A" } } } )
db.inventory.find( { 'instock.qty': { $lte: 20 } } )    //查询instock数组中的qty字段值小于或等于20的文档
db.inventory.find( { 'instock.0.qty': { $lte: 20 } } )  //查询instock数组的第一个元素中的qty的值小于或等于20的文档
//查询instock数组中的qty等于5的并且warehouse等于"A"的文档
db.inventory.find( { "instock.qty": 5, "instock.warehouse": "A" } )   

默认情况下,MongoDB中的查询返回匹配文档中的所有字段。要限制MongoDB发送到应用程序的数据量,可以包含投影文档以指定或限制要返回的字段。例如:

//只能写1或0, _id字段默认都返回,需要主动指定_id:0 才会隐藏,需要返回什么字段,就( key : 1 )
db.inventory.find( { item: "journal" }, { instock: 1, _id: 0 } )   

猜你喜欢

转载自blog.csdn.net/qq_23375733/article/details/82730738
今日推荐