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();
  • 相关阅读:
    量化平台的发展转
    jmeter全面总结8jmeter实战
    月见笔谈【一】——关于悲剧
    为什么要不断接触和学习新技术之我见
    WPF后台动态调用样式文件
    WPF后台动态添加TabItem并设置样式
    SQL查询SQLSERVER数据库中的临时表结构脚本
    防抖功能的实现
    项目中自定义进度条的实现
    vue3 请求响应拦截
  • 原文地址:https://www.cnblogs.com/iiot/p/4463873.html
Copyright © 2011-2022 走看看