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();
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值