MongoDB 查出包含有list的部分项的记录 all/in/and
MongoDB,acl是"admin", "root"时,用以下命令查:
db.UserInfo.find({"acl": ["admin", "root"]})
但是acl是"admin", "root","其它项";即多于列出那两项时,就查不出来;
我想查包含有指定的两项时,就列出;可以多出其它项
db.UserInfo.find({"acl": {$all: ["admin", "root"]}}) //至少同时包含有这两项的就查出
db.UserInfo.find({"acl": {"$in": ["admin", "root"]}}) // 包含有这两项的,都查出;
db.UserInfo.find({"acl": {$all: ["admin", "root"]}}) //1
db.UserInfo.find({acl: {$all: ["admin", "root"]}}) //1
db.UserInfo.find( { $and: [ { acl: [ "admin", "root" ] } ] } ) //mongodb-win32-x86_64-windows-5.0.12 试了,只同时包含这两项才出现
db.UserInfo.find({ $and: [ { acl: "admin" }, { acl: "root" } ] }) //3 1与3的效果一样
Equivalent to $and
Operation
The $all is equivalent to an $and operation of the specified values; i.e. the following statement:
{ tags: { $all: [ "ssl" , "security" ] } } |
is equivalent to:
{ $and: [ { tags: "ssl" }, { tags: "security" } ] } |
$all — MongoDB Manualhttps://www.mongodb.com/docs/upcoming/reference/operator/query/all/#op._S_all
以下是ORM Bee通用页面对象的方法来操作MongoDB;
Bee也是有MongoDB ORM功能的。
用面向对象简单多了,不需要去记MongoDB的语法。
同时有,有找出,多了项的也不会匹配。
List acl=new ArrayList<>();
acl.add("admin");
acl.add("root"); //两项的前后顺序无关
UserInfo userInfo2=new UserInfo();
userInfo2.setAcl(acl); //同时有,有找出,多了项的也不会匹配。
suid.select(userInfo2);
包含有其中一个项,即会找出
List acl=new ArrayList<>();
acl.add("admin");
acl.add("root");
UserInfo userInfo2=new UserInfo();
Condition condition=BF.getCondition();
condition.op("acl", Op.in, acl); //包含有其中一个项,即会找出
至少同时包含有这两项(可以多),与all效果一样.
List acl=new ArrayList<>();
acl.add("admin");
List acl2=new ArrayList<>();
acl2.add("root");
UserInfo userInfo2=new UserInfo();
// db.UserInfo.find({"$and": [{"acl": {"$in": ["admin"]}}, {"acl": {"$in": ["root"]}}]})
Condition condition=BF.getCondition();
condition.op("acl", Op.in, acl);
// condition.and(); //会自动加
condition.op("acl", Op.in, acl2);
suid.select(userInfo2,condition);