查询数组
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 ] }
]);
数组字段做等值查询的时候,使用查询文档**{:}**其中 ****是要精确匹配的数组,包含元素的顺序。
下面的案例返回inventory集合中数组字段tags值是只包含两个元素"red","blank"并且有指定顺序的数组的所有文档:
db.inventory.find( { tags: ["red", "blank"] } )
db.inventory.find( { tags: { $all: ["red", "blank"] } } )
检索数组字段中至少一个元素等于指定的值,使用**:的形式,其中**是一个元素值。
下面的案例返回inventory集合中数组字段tags中有一个元素的值是**"red"**的所有文档:
db.inventory.find( { tags: "red" } )
{ <array field>: { <operator1>: <value1>, ... } }
下面的案例返回inventory集合中数组字段dim_cm中最少有一个元素的值大于25的所有文档。
db.inventory.find( { dim_cm: { $gt: 25 } } )
使用多条件查询数组中的元素时,可以在查询语句中指定单个数组元素满足所有查询条件还是多个数组中的元素联合满足所有条件。
下面的案例返回inventory集合中数组字段dim_cm中单个元素同时满足大于15并且小于20,或者一个元素满足大于15,另外一个元素小于20的所有文档:
db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )
db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )
Note:当使用点号的时候,字段和嵌套文档字段必须在引号内
下面的案例返回数组字段dim_cm中第二个元素大于25的所有文档:
db.inventory.find( { "dim_cm.1": { $gt: 25 } } )
下面的查询返回数组字段tags中有三个元素的所有文档 :
db.inventory.find( { "tags": { $size: 3 } } )
原文链接:https://docs.mongodb.com/manual/tutorial/query-arrays/
译者:张芷嘉
最近更新 1yr ago