您的位置:首页 > 数据库 > Mongodb

morphia查询mongodb内嵌文档

2015-04-28 19:30 423 查看
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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: