morphia查询mongodb内嵌文档-数组查询$elemMatch|hasThisElement实例

mongodb中存储的文档格式如下,实现查询fromdata下did和dvid为指定值的数据

   {    "_id": {      "$oid": "553f4a9facc494278f5ad1b0"    },    
	"rid": "9eec7fbe8a6f4d17b02756fdbcefcc41",    
	"rname": "测试场景1",    
	"username": "zhaoptest",    
	"enable": 1,    
	"fromdata": [      {        "did": "aaa",        "dvid": "1",        "opt": "3",        "value": "44"      },      
			   {        "did": "bbb",        "dvid": "1",        "opt": "3",        "value": "44"      }    ],    
	"todata": [      {        "did": "aaa",        "dvid": "2",        "value": "3"      },      
			{        "did": "ccc",        "dvid": "2",        "value": "3"      }    ] 
   }

使用db.device_rules.find({ "fromdata.did" : "bbb", "fromdata.dvid" : "1" })进行查询fromdata中did=bbb,dvid=1的数据
但当查询did=bbb,dvid=2时,仍能查出上面的结果,查询条件和数组中不同的文档进行了匹配!

利用条件操作符“$elemMatch”可以组合一组条件,并且还能达到的“点表示法”的模糊查询的效果,如下:

db.device_rules.find({ "fromdata" : { "$elemMatch" : { "did" : "bbb", "dvid" : "2" } } })

 

使用morphia进行查询:

1. 针对 db.device_rules.find({ "fromdata.did" : "bbb", "fromdata.dvid" : "1" })

this.createQuery().field("fromdata.did").equal(fromDid).field("fromdata.dvid").equal(fromDvid).asList();

 

2 针对 db.device_rules.find({ "fromdata" : { "$elemMatch" : { "did" : "bbb", "dvid" : "2" } } })

        FromData fd = new FromData();          
	fd.setDid(fromDid);          
	fd.setDvid(fromDvid);          
	return this.createQuery().field("fromdata").hasThisElement(fd).asList();

你可能感兴趣的:(morphia)