MongoDB 查出包含有list的部分项的记录 all/in/and

时间:2024-01-27 17:32:26

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);