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

 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄