zoukankan      html  css  js  c++  java
  • morphia 框架 mongodb内嵌查询

    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();
    当你的才华还撑不起你的野心时
    那你就应该静下心来学习
    当你的能力还驾驭不了你的目标时
    那就应该沉下心来历练
  • 相关阅读:
    bzoj3295: [Cqoi2011]动态逆序对
    bzoj3262: 陌上花开
    bzoj1176: [Balkan2007]Mokia
    bzoj1935: [Shoi2007]Tree 园丁的烦恼
    [APIO / CTSC2007]数据备份 --- 贪心
    [APIO2007]风铃 --- 贪心
    [NOI2015]寿司晚宴 --- 状压DP
    [NOI2007]货币兑换 --- DP + 斜率优化(CDQ分治)
    [NOI2009]诗人小G --- DP + 决策单调性
    [HNOI2008]玩具装箱TOY --- DP + 斜率优化 / 决策单调性
  • 原文地址:https://www.cnblogs.com/yang-xiansen/p/10672165.html
Copyright © 2011-2022 走看看