We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
$elemMatch 和点运算符都是匹配数组里面嵌套的字段
db.inventory.find( { "instock": { $elemMatch: { qty: { $gt: 10, $lte: 20 } } } } ) db.inventory.find( { "instock.qty": { $gt: 10, $lte: 20 } } )
两个都是匹配10<qty<=20,查出来的结果却有点不一样;$elemMatch是对数组嵌套的同一条记录的字段值要同时满足条件,即 qty>10 且 qty<=20;点运算符是数组中包含一条记录 a 存在 qty>10 和一条记录 b 存在 qty<=20(a 不一定等于 b)
10<qty<=20
$elemMatch
例如:
> 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 } ] } ]); > db.inventory.find( { "instock": { $elemMatch: { qty: { $gt: 10, $lte: 20 } } } } , {_id: 0}) //匹配的结果得在同一个记录里 { "item" : "journal", "instock" : [ { "warehouse" : "A", "qty" : 5 }, { "warehouse" : "C", "qty" : 15 } ] } { "item" : "paper", "instock" : [ { "warehouse" : "A", "qty" : 60 }, { "warehouse" : "B", "qty" : 15 } ] } { "item" : "postcard", "instock" : [ { "warehouse" : "B", "qty" : 15 }, { "warehouse" : "C", "qty" : 35 } ] } > db.inventory.find( { "instock.qty": { $gt: 10, $lte: 20 } } ,{_id: 0}) //匹配的结果可以不在同一个记录里 { "item" : "journal", "instock" : [ { "warehouse" : "A", "qty" : 5 }, { "warehouse" : "C", "qty" : 15 } ] } { "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 } ] } > db.inventory.find( { "instock.qty": 5, "instock.warehouse": "A" } ,{_id: 0}) //匹配的结果可以不在同一个记录里 { "item" : "journal", "instock" : [ { "warehouse" : "A", "qty" : 5 }, { "warehouse" : "C", "qty" : 15 } ] } { "item" : "planner", "instock" : [ { "warehouse" : "A", "qty" : 40 }, { "warehouse" : "B", "qty" : 5 } ] }
资料参考 query-array-of-documents
$elemMatch vs dot notation
The text was updated successfully, but these errors were encountered:
No branches or pull requests
$elemMatch 和点运算符都是匹配数组里面嵌套的字段
两个都是匹配
10<qty<=20
,查出来的结果却有点不一样;$elemMatch
是对数组嵌套的同一条记录的字段值要同时满足条件,即 qty>10 且 qty<=20;点运算符是数组中包含一条记录 a 存在 qty>10 和一条记录 b 存在 qty<=20(a 不一定等于 b)例如:
资料参考
query-array-of-documents
$elemMatch vs dot notation
The text was updated successfully, but these errors were encountered: