Mongo笔记4-查询

db.collection.find()方法进行查询操作的示例

查询文档

先插入数据

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

]);

选择集合中的所有文档

要选择集合中的所有文档,请将空文档作为查询筛选器参数传递给find方法。查询筛选器参数确定选择条件:
 

> db.inventory.find()

{ "_id" : ObjectId("5c7654952939fb413b602d5c"), "item" : "journal", "qty" : 25, "status" : "A", "size" : { "h" : 14, "w" : 21, "uom" : "cm" }, "tags" : [ "blank", "red" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d5d"), "item" : "notebook", "qty" : 50, "status" : "A", "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "tags" : [ "red", "blank" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d5e"), "item" : "paper", "qty" : 100, "status" : "D", "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "tags" : [ "red", "blank", "plain" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d5f"), "item" : "planner", "qty" : 75, "status" : "D", "size" : { "h" : 22.85, "w" : 30, "uom" : "cm" }, "tags" : [ "blank", "red" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d60"), "item" : "postcard", "qty" : 45, "status" : "A", "size" : { "h" : 10, "w" : 15.25, "uom" : "cm" }, "tags" : [ "blue" ] }

>

指定条件

要指定相等条件,在查询筛选器文档中使用<field>:<value>表达式:

> db.inventory.find( { status: "D" } )

{ "_id" : ObjectId("5c7654952939fb413b602d5e"), "item" : "paper", "qty" : 100, "status" : "D", "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "tags" : [ "red", "blank", "plain" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d5f"), "item" : "planner", "qty" : 75, "status" : "D", "size" : { "h" : 22.85, "w" : 30, "uom" : "cm" }, "tags" : [ "blank", "red" ] }

>
扫描二维码关注公众号,回复: 5373789 查看本文章

使用查询操作符指定条件

格式如下:

{ <field1>: { <operator1>: <value1> }, ... }

OR条件

status IN ('A','D')

> db.inventory.find( { status: { $in: [ "A", "D" ] } } )

{ "_id" : ObjectId("5c7654952939fb413b602d5c"), "item" : "journal", "qty" : 25, "status" : "A", "size" : { "h" : 14, "w" : 21, "uom" : "cm" }, "tags" : [ "blank", "red" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d5d"), "item" : "notebook", "qty" : 50, "status" : "A", "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "tags" : [ "red", "blank" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d5e"), "item" : "paper", "qty" : 100, "status" : "D", "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "tags" : [ "red", "blank", "plain" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d5f"), "item" : "planner", "qty" : 75, "status" : "D", "size" : { "h" : 22.85, "w" : 30, "uom" : "cm" }, "tags" : [ "blank", "red" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d60"), "item" : "postcard", "qty" : 45, "status" : "A", "size" : { "h" : 10, "w" : 15.25, "uom" : "cm" }, "tags" : [ "blue" ] }

>

ADN 条件

status = "A" AND qty < 30

> db.inventory.find( { status: "A", qty: { $lt: 30 } } )

{ "_id" : ObjectId("5c7654952939fb413b602d5c"), "item" : "journal", "qty" : 25, "status" : "A", "size" : { "h" : 14, "w" : 21, "uom" : "cm" }, "tags" : [ "blank", "red" ] }

>

AND 和 OR条件

status = "A" AND ( qty < 30 OR item LIKE "p%")

> db.inventory.find( {

... status: "A",

... $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]

... } )

{ "_id" : ObjectId("5c7654952939fb413b602d5c"), "item" : "journal", "qty" : 25, "status" : "A", "size" : { "h" : 14, "w" : 21, "uom" : "cm" }, "tags" : [ "blank", "red" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d60"), "item" : "postcard", "qty" : 45, "status" : "A", "size" : { "h" : 10, "w" : 15.25, "uom" : "cm" }, "tags" : [ "blue" ] }

>

查询嵌入/嵌套文档

选择字段size等于文档{h: 14, w: 21, uom: "cm"}的所有文档:

> db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } )

{ "_id" : ObjectId("5c7654952939fb413b602d5c"), "item" : "journal", "qty" : 25, "status" : "A", "size" : { "h" : 14, "w" : 21, "uom" : "cm" }, "tags" : [ "blank", "red" ] }

>

选择在size字段中嵌套的字段uom等于“in”的所有文档:

> db.inventory.find( { "size.uom": "in" } )

{ "_id" : ObjectId("5c7654952939fb413b602d5d"), "item" : "notebook", "qty" : 50, "status" : "A", "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "tags" : [ "red", "blank" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d5e"), "item" : "paper", "qty" : 100, "status" : "D", "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "tags" : [ "red", "blank", "plain" ] }

>

查询操作符匹配

格式:{ <field1>: { <operator1>: <value1> }, ... }

在size字段中嵌入的字段h上使用小于运算符($lt):

> db.inventory.find( { "size.h": { $lt: 15 } } )

{ "_id" : ObjectId("5c7654952939fb413b602d5c"), "item" : "journal", "qty" : 25, "status" : "A", "size" : { "h" : 14, "w" : 21, "uom" : "cm" }, "tags" : [ "blank", "red" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d5d"), "item" : "notebook", "qty" : 50, "status" : "A", "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "tags" : [ "red", "blank" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d5e"), "item" : "paper", "qty" : 100, "status" : "D", "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "tags" : [ "red", "blank", "plain" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d60"), "item" : "postcard", "qty" : 45, "status" : "A", "size" : { "h" : 10, "w" : 15.25, "uom" : "cm" }, "tags" : [ "blue" ] }

>

查询选择嵌套字段h小于15、嵌套字段uom等于“in”、status字段等于“D”的所有文档

> db.inventory.find( { "size.h": { $lt: 15 }, "size.uom": "in", status: "D" } )

{ "_id" : ObjectId("5c7654952939fb413b602d5e"), "item" : "paper", "qty" : 100, "status" : "D", "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "tags" : [ "red", "blank", "plain" ] }

>

查询数组

先插入数据

> db.inventory.insertMany([

... { item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] },

... { item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] },

... { item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] },

... { item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] },

... { item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] }

... ]);

{

"acknowledged" : true,

"insertedIds" : [

ObjectId("5c77b39f5a67f359e4c2bf2a"),

ObjectId("5c77b39f5a67f359e4c2bf2b"),

ObjectId("5c77b39f5a67f359e4c2bf2c"),

ObjectId("5c77b39f5a67f359e4c2bf2d"),

ObjectId("5c77b39f5a67f359e4c2bf2e")

]

}

>

下面的示例查询所有字段标记值是一个数组的文档,该数组恰好有两个元素,“red”和“blanck”,它们的顺序是指定的:

> db.inventory.find( { tags: ["red", "blank"] } )

{ "_id" : ObjectId("5c7654952939fb413b602d5d"), "item" : "notebook", "qty" : 50, "status" : "A", "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "tags" : [ "red", "blank" ] }

{ "_id" : ObjectId("5c77b39f5a67f359e4c2bf2b"), "item" : "notebook", "qty" : 50, "tags" : [ "red", "blank" ], "dim_cm" : [ 14, 21 ] }

>

如果要查找同时包含“red”和“blanck”元素的数组,而不考虑数组中的顺序或其他元素,请使用$all操作数
 

> db.inventory.find( { tags: { $all: ["red", "blank"] } } )

{ "_id" : ObjectId("5c7654952939fb413b602d5c"), "item" : "journal", "qty" : 25, "status" : "A", "size" : { "h" : 14, "w" : 21, "uom" : "cm" }, "tags" : [ "blank", "red" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d5d"), "item" : "notebook", "qty" : 50, "status" : "A", "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "tags" : [ "red", "blank" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d5e"), "item" : "paper", "qty" : 100, "status" : "D", "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "tags" : [ "red", "blank", "plain" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d5f"), "item" : "planner", "qty" : 75, "status" : "D", "size" : { "h" : 22.85, "w" : 30, "uom" : "cm" }, "tags" : [ "blank", "red" ] }

{ "_id" : ObjectId("5c77b39f5a67f359e4c2bf2a"), "item" : "journal", "qty" : 25, "tags" : [ "blank", "red" ], "dim_cm" : [ 14, 21 ] }

{ "_id" : ObjectId("5c77b39f5a67f359e4c2bf2b"), "item" : "notebook", "qty" : 50, "tags" : [ "red", "blank" ], "dim_cm" : [ 14, 21 ] }

{ "_id" : ObjectId("5c77b39f5a67f359e4c2bf2c"), "item" : "paper", "qty" : 100, "tags" : [ "red", "blank", "plain" ], "dim_cm" : [ 14, 21 ] }

{ "_id" : ObjectId("5c77b39f5a67f359e4c2bf2d"), "item" : "planner", "qty" : 75, "tags" : [ "blank", "red" ], "dim_cm" : [ 22.85, 30 ] }



根据数组的元素查询

要查询数组字段是否包含至少一个具有指定值的元素,可以使用过滤器{<field>: <value>},其中<value>是元素值。

> db.inventory.find( { tags: "red" } )

{ "_id" : ObjectId("5c7654952939fb413b602d5c"), "item" : "journal", "qty" : 25, "status" : "A", "size" : { "h" : 14, "w" : 21, "uom" : "cm" }, "tags" : [ "blank", "red" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d5d"), "item" : "notebook", "qty" : 50, "status" : "A", "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "tags" : [ "red", "blank" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d5e"), "item" : "paper", "qty" : 100, "status" : "D", "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "tags" : [ "red", "blank", "plain" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d5f"), "item" : "planner", "qty" : 75, "status" : "D", "size" : { "h" : 22.85, "w" : 30, "uom" : "cm" }, "tags" : [ "blank", "red" ] }

{ "_id" : ObjectId("5c77b39f5a67f359e4c2bf2a"), "item" : "journal", "qty" : 25, "tags" : [ "blank", "red" ], "dim_cm" : [ 14, 21 ] }

{ "_id" : ObjectId("5c77b39f5a67f359e4c2bf2b"), "item" : "notebook", "qty" : 50, "tags" : [ "red", "blank" ], "dim_cm" : [ 14, 21 ] }

{ "_id" : ObjectId("5c77b39f5a67f359e4c2bf2c"), "item" : "paper", "qty" : 100, "tags" : [ "red", "blank", "plain" ], "dim_cm" : [ 14, 21 ] }

{ "_id" : ObjectId("5c77b39f5a67f359e4c2bf2d"), "item" : "planner", "qty" : 75, "tags" : [ "blank", "red" ], "dim_cm" : [ 22.85, 30 ] }

>

若要指定数组字段中元素的条件,请使用查询筛选器文档中的查询运算符:

格式:

{<array field>: { <operator1>: <value1>, ... } }

数组dim_cm至少包含一个值大于25的元素。

> db.inventory.find( { dim_cm: { $gt: 25 } } )

{ "_id" : ObjectId("5c77b39f5a67f359e4c2bf2d"), "item" : "planner", "qty" : 75, "tags" : [ "blank", "red" ], "dim_cm" : [ 22.85, 30 ] }

>

查询满足多个条件的数组元素

查询dim_cm数组中至少包含一个大于($gt) 22和小于($lt) 30的元素的文档

> db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )

{ "_id" : ObjectId("5c77b39f5a67f359e4c2bf2d"), "item" : "planner", "qty" : 75, "tags" : [ "blank", "red" ], "dim_cm" : [ 22.85, 30 ] }

>

根据数组下标查询

查询数组dim_cm中第二个元素大于25的所有文档:

> db.inventory.find( { "dim_cm.1": { $gt: 25 } } )
{ "_id" : ObjectId("5c77b39f5a67f359e4c2bf2d"), "item" : "planner", "qty" : 75, "tags" : [ "blank", "red" ], "dim_cm" : [ 22.85, 30 ] }
> 

根据数组长度查询

使用$size操作符按元素数量查询数组。例如,下面选择数组标记包含3个元素的文档。

> db.inventory.find( { "tags": { $size: 3 } } )

{ "_id" : ObjectId("5c7654952939fb413b602d5e"), "item" : "paper", "qty" : 100, "status" : "D", "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "tags" : [ "red", "blank", "plain" ] }

{ "_id" : ObjectId("5c77b39f5a67f359e4c2bf2c"), "item" : "paper", "qty" : 100, "tags" : [ "red", "blank", "plain" ], "dim_cm" : [ 14, 21 ] }

>

查询嵌入文档的数组

先插入数据

> 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 } ] }

... ]);

{

"acknowledged" : true,

"insertedIds" : [

ObjectId("5c77b82d5a67f359e4c2bf2f"),

ObjectId("5c77b82d5a67f359e4c2bf30"),

ObjectId("5c77b82d5a67f359e4c2bf31"),

ObjectId("5c77b82d5a67f359e4c2bf32"),

ObjectId("5c77b82d5a67f359e4c2bf33")

]

}

>

选择instock数组中的元素与指定文档匹配的所有文档:

> db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf2f"), "item" : "journal", "instock" : [ { "warehouse" : "A", "qty" : 5 }, { "warehouse" : "C", "qty" : 15 } ] }

>

在整个嵌入式/嵌套文档上进行相等匹配需要与指定文档进行精确匹配,包括字段顺序。

例如,下面的查询不匹配库存集合中的任何文档

> db.inventory.find( { "instock": { qty: 5, warehouse: "A" } } )

>

指定嵌入在文档数组中的字段的查询条件

选择instock数组中至少有一个嵌入文档的所有文档,该文档包含的字段qty值小于或等于20

db.inventory.find( { 'instock.qty': { $lte: 20 } } )

> db.inventory.find( { 'instock.qty': { $lte: 20 } } )

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf2f"), "item" : "journal", "instock" : [ { "warehouse" : "A", "qty" : 5 }, { "warehouse" : "C", "qty" : 15 } ] }

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf30"), "item" : "notebook", "instock" : [ { "warehouse" : "C", "qty" : 5 } ] }

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf31"), "item" : "paper", "instock" : [ { "warehouse" : "A", "qty" : 60 }, { "warehouse" : "B", "qty" : 15 } ] }

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf32"), "item" : "planner", "instock" : [ { "warehouse" : "A", "qty" : 40 }, { "warehouse" : "B", "qty" : 5 } ] }

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf33"), "item" : "postcard", "instock" : [ { "warehouse" : "B", "qty" : 15 }, { "warehouse" : "C", "qty" : 35 } ] }

>

单个嵌套文档满足嵌套字段上的多个查询条件

使用$elemMatch操作符在嵌入式文档数组上指定多个条件,使至少一个嵌入式文档满足所有指定的条件。

> db.inventory.find( { 'instock.qty': { $lte: 20 } } )

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf2f"), "item" : "journal", "instock" : [ { "warehouse" : "A", "qty" : 5 }, { "warehouse" : "C", "qty" : 15 } ] }

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf30"), "item" : "notebook", "instock" : [ { "warehouse" : "C", "qty" : 5 } ] }

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf31"), "item" : "paper", "instock" : [ { "warehouse" : "A", "qty" : 60 }, { "warehouse" : "B", "qty" : 15 } ] }

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf32"), "item" : "planner", "instock" : [ { "warehouse" : "A", "qty" : 40 }, { "warehouse" : "B", "qty" : 5 } ] }

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf33"), "item" : "postcard", "instock" : [ { "warehouse" : "B", "qty" : 15 }, { "warehouse" : "C", "qty" : 35 } ] }

>

>

>

>

> db.inventory.find( { "instock": { $elemMatch: { qty: 5, warehouse: "A" } } } )

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf2f"), "item" : "journal", "instock" : [ { "warehouse" : "A", "qty" : 5 }, { "warehouse" : "C", "qty" : 15 } ] }

>

> db.inventory.find( { "instock": { $elemMatch: { qty: { $gt: 10, $lte: 20 } } } } )

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf2f"), "item" : "journal", "instock" : [ { "warehouse" : "A", "qty" : 5 }, { "warehouse" : "C", "qty" : 15 } ] }

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf31"), "item" : "paper", "instock" : [ { "warehouse" : "A", "qty" : 60 }, { "warehouse" : "B", "qty" : 15 } ] }

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf33"), "item" : "postcard", "instock" : [ { "warehouse" : "B", "qty" : 15 }, { "warehouse" : "C", "qty" : 35 } ] }

>

>

元素的组合满足条件

如果数组字段上的复合查询条件不使用$elemMatch操作符,查询将选择其数组中包含满足条件的任何元素组合的文档。

> db.inventory.find( { "instock.qty": { $gt: 10, $lte: 20 } } )

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf2f"), "item" : "journal", "instock" : [ { "warehouse" : "A", "qty" : 5 }, { "warehouse" : "C", "qty" : 15 } ] }

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf31"), "item" : "paper", "instock" : [ { "warehouse" : "A", "qty" : 60 }, { "warehouse" : "B", "qty" : 15 } ] }

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf32"), "item" : "planner", "instock" : [ { "warehouse" : "A", "qty" : 40 }, { "warehouse" : "B", "qty" : 5 } ] }

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf33"), "item" : "postcard", "instock" : [ { "warehouse" : "B", "qty" : 15 }, { "warehouse" : "C", "qty" : 35 } ] }

>

>

> db.inventory.find( { "instock.qty": 5, "instock.warehouse": "A" } )

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf2f"), "item" : "journal", "instock" : [ { "warehouse" : "A", "qty" : 5 }, { "warehouse" : "C", "qty" : 15 } ] }

{ "_id" : ObjectId("5c77b82d5a67f359e4c2bf32"), "item" : "planner", "instock" : [ { "warehouse" : "A", "qty" : 40 }, { "warehouse" : "B", "qty" : 5 } ] }

>

返回指定字段

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

先插入数据

> db.inventory.insertMany( [

... { item: "journal", status: "A", size: { h: 14, w: 21, uom: "cm" }, instock: [ { warehouse: "A", qty: 5 } ] },

... { item: "notebook", status: "A", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "C", qty: 5 } ] },

... { item: "paper", status: "D", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "A", qty: 60 } ] },

... { item: "planner", status: "D", size: { h: 22.85, w: 30, uom: "cm" }, instock: [ { warehouse: "A", qty: 40 } ] },

... { item: "postcard", status: "A", size: { h: 10, w: 15.25, uom: "cm" }, instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }

... ]);

{

"acknowledged" : true,

"insertedIds" : [

ObjectId("5c77ca2d5a67f359e4c2bf34"),

ObjectId("5c77ca2d5a67f359e4c2bf35"),

ObjectId("5c77ca2d5a67f359e4c2bf36"),

ObjectId("5c77ca2d5a67f359e4c2bf37"),

ObjectId("5c77ca2d5a67f359e4c2bf38")

]

}

>

只返回指定的字段和_id字段

投影可以通过将投影文档中的<field>设置为1显式地包含多个字段

只返回 _id, item, status

> db.inventory.find( { status: "A" }, { item: 1, status: 1 } )

{ "_id" : ObjectId("5c7654952939fb413b602d5c"), "item" : "journal", "status" : "A" }

{ "_id" : ObjectId("5c7654952939fb413b602d5d"), "item" : "notebook", "status" : "A" }

{ "_id" : ObjectId("5c7654952939fb413b602d60"), "item" : "postcard", "status" : "A" }

{ "_id" : ObjectId("5c77ca2d5a67f359e4c2bf34"), "item" : "journal", "status" : "A" }

{ "_id" : ObjectId("5c77ca2d5a67f359e4c2bf35"), "item" : "notebook", "status" : "A" }

{ "_id" : ObjectId("5c77ca2d5a67f359e4c2bf38"), "item" : "postcard", "status" : "A" }

>

只返回item, status,不返回_id

> db.inventory.find( { status: "A" }, { item: 1, status: 1, _id: 0 } )

{ "item" : "journal", "status" : "A" }

{ "item" : "notebook", "status" : "A" }

{ "item" : "postcard", "status" : "A" }

{ "item" : "journal", "status" : "A" }

{ "item" : "notebook", "status" : "A" }

{ "item" : "postcard", "status" : "A" }

>

返回除被排除的字段之外的所有字段

> db.inventory.find( { status: "A" }, { status: 0, instock: 0 } )

{ "_id" : ObjectId("5c7654952939fb413b602d5c"), "item" : "journal", "qty" : 25, "size" : { "h" : 14, "w" : 21, "uom" : "cm" }, "tags" : [ "blank", "red" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d5d"), "item" : "notebook", "qty" : 50, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "tags" : [ "red", "blank" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d60"), "item" : "postcard", "qty" : 45, "size" : { "h" : 10, "w" : 15.25, "uom" : "cm" }, "tags" : [ "blue" ] }

{ "_id" : ObjectId("5c77ca2d5a67f359e4c2bf34"), "item" : "journal", "size" : { "h" : 14, "w" : 21, "uom" : "cm" } }

{ "_id" : ObjectId("5c77ca2d5a67f359e4c2bf35"), "item" : "notebook", "size" : { "h" : 8.5, "w" : 11, "uom" : "in" } }

{ "_id" : ObjectId("5c77ca2d5a67f359e4c2bf38"), "item" : "postcard", "size" : { "h" : 10, "w" : 15.25, "uom" : "cm" } }

>

¶返回在嵌入式文档中的特定字段

使用点表示法来引用嵌入字段,并在投影文档中将其设置为1。

> db.inventory.find(

... { status: "A" },

... { item: 1, status: 1, "size.uom": 1 }

... )

{ "_id" : ObjectId("5c7654952939fb413b602d5c"), "item" : "journal", "status" : "A", "size" : { "uom" : "cm" } }

{ "_id" : ObjectId("5c7654952939fb413b602d5d"), "item" : "notebook", "status" : "A", "size" : { "uom" : "in" } }

{ "_id" : ObjectId("5c7654952939fb413b602d60"), "item" : "postcard", "status" : "A", "size" : { "uom" : "cm" } }

{ "_id" : ObjectId("5c77ca2d5a67f359e4c2bf34"), "item" : "journal", "status" : "A", "size" : { "uom" : "cm" } }

{ "_id" : ObjectId("5c77ca2d5a67f359e4c2bf35"), "item" : "notebook", "status" : "A", "size" : { "uom" : "in" } }

{ "_id" : ObjectId("5c77ca2d5a67f359e4c2bf38"), "item" : "postcard", "status" : "A", "size" : { "uom" : "cm" } }

>

隐藏嵌套文档中的特定字段。使用点表示法来引用投影文档中的嵌入字段,并将其设置为0。

> db.inventory.find(

... { status: "A" },

... { "size.uom": 0 }

... )

{ "_id" : ObjectId("5c7654952939fb413b602d5c"), "item" : "journal", "qty" : 25, "status" : "A", "size" : { "h" : 14, "w" : 21 }, "tags" : [ "blank", "red" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d5d"), "item" : "notebook", "qty" : 50, "status" : "A", "size" : { "h" : 8.5, "w" : 11 }, "tags" : [ "red", "blank" ] }

{ "_id" : ObjectId("5c7654952939fb413b602d60"), "item" : "postcard", "qty" : 45, "status" : "A", "size" : { "h" : 10, "w" : 15.25 }, "tags" : [ "blue" ] }

{ "_id" : ObjectId("5c77ca2d5a67f359e4c2bf34"), "item" : "journal", "status" : "A", "size" : { "h" : 14, "w" : 21 }, "instock" : [ { "warehouse" : "A", "qty" : 5 } ] }

{ "_id" : ObjectId("5c77ca2d5a67f359e4c2bf35"), "item" : "notebook", "status" : "A", "size" : { "h" : 8.5, "w" : 11 }, "instock" : [ { "warehouse" : "C", "qty" : 5 } ] }

{ "_id" : ObjectId("5c77ca2d5a67f359e4c2bf38"), "item" : "postcard", "status" : "A", "size" : { "h" : 10, "w" : 15.25 }, "instock" : [ { "warehouse" : "B", "qty" : 15 }, { "warehouse" : "C", "qty" : 35 } ] }

>

使用点表示法在嵌入到数组中的文档中投影特定字段。

> db.inventory.find( { status: "A" }, { item: 1, status: 1, "instock.qty": 1 } )

{ "_id" : ObjectId("5c7654952939fb413b602d5c"), "item" : "journal", "status" : "A" }

{ "_id" : ObjectId("5c7654952939fb413b602d5d"), "item" : "notebook", "status" : "A" }

{ "_id" : ObjectId("5c7654952939fb413b602d60"), "item" : "postcard", "status" : "A" }

{ "_id" : ObjectId("5c77ca2d5a67f359e4c2bf34"), "item" : "journal", "status" : "A", "instock" : [ { "qty" : 5 } ] }

{ "_id" : ObjectId("5c77ca2d5a67f359e4c2bf35"), "item" : "notebook", "status" : "A", "instock" : [ { "qty" : 5 } ] }

{ "_id" : ObjectId("5c77ca2d5a67f359e4c2bf38"), "item" : "postcard", "status" : "A", "instock" : [ { "qty" : 15 }, { "qty" : 35 } ] }

>

对于包含数组的字段,MongoDB提供了以下用于操作数组的投影操作符:$elemMatch、$slice和$。

下面的示例使用$slice投影运算符返回instock数组中的最后一个元素:

> db.inventory.find( { status: "A" }, { item: 1, status: 1, instock: { $slice: -1 } } )

{ "_id" : ObjectId("5c7654952939fb413b602d5c"), "item" : "journal", "status" : "A" }

{ "_id" : ObjectId("5c7654952939fb413b602d5d"), "item" : "notebook", "status" : "A" }

{ "_id" : ObjectId("5c7654952939fb413b602d60"), "item" : "postcard", "status" : "A" }

{ "_id" : ObjectId("5c77ca2d5a67f359e4c2bf34"), "item" : "journal", "status" : "A", "instock" : [ { "warehouse" : "A", "qty" : 5 } ] }

{ "_id" : ObjectId("5c77ca2d5a67f359e4c2bf35"), "item" : "notebook", "status" : "A", "instock" : [ { "warehouse" : "C", "qty" : 5 } ] }

{ "_id" : ObjectId("5c77ca2d5a67f359e4c2bf38"), "item" : "postcard", "status" : "A", "instock" : [ { "warehouse" : "C", "qty" : 35 } ] }

>

查询空字段或缺少的字段

> db.inventory.insertMany([

... { _id: 1, item: null },

... { _id: 2 }

... ])

{ "acknowledged" : true, "insertedIds" : [ 1, 2 ] }

>

查询匹配的文档要么包含值为null的项字段,要么不包含项字段

> db.inventory.find( { item: null } )

{ "_id" : 1, "item" : null }

{ "_id" : 2 }

>

The { item : { $type: 10 } }查询包含指定字段且为null的

> db.inventory.find( { item : { $type: 10 } } )

{ "_id" : 1, "item" : null }

>

查询不包含item字段的

> db.inventory.find( { item : { $exists: false } } )

{ "_id" : 2 }

>

猜你喜欢

转载自blog.csdn.net/Linzhongyilisha/article/details/88043872