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" ] }
>
使用查询操作符指定条件
格式如下:
{ <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 }
>