Mongo使用未知父键查找值

  发布于 2022-12-10 14:28

我在Mongo表中寻找一个值,其父键可能没有描述性或已知名称.以下是我们的文档之一的示例.

    { 
       "assetsId": {
         "0": "546cf2f8585ffa451bb68369" 
      },
       "slotTypes": {
         "0": { "usage": "json" },
         "1":  { "usage": "image" }
      }
    }

我想查看它是否包含slotTypes中的"usage":"json",但我无法保证此用法的父键将为"0".

我尝试使用以下查询,没有任何运气:

db.documents.find(
   {
     slotTypes:
       {
          $elemMatch:
            {
               "usage": "json"
            }
       }
    }
)

如果这是一个非常基本的问题,请提前抱歉,但我不习惯在nosql数据库中工作.

1 个回答
  • 我不确定你是否能够用你当前的架构优雅地解决这个问题; slotTypes应该是一个子文档数组,这将允许您的$elemMatch查询工作.现在,它是一个带有数字键的对象.

    也就是说,您的文档架构应该是这样的:

    {
       "assetsId": {
         "0": "546cf2f8585ffa451bb68369"
      },
       "slotTypes": [
         { "usage": "json" },
         { "usage": "image" }
      ]
    }
    

    如果不能更改数据布局,那么您将需要基本扫描每个文档以查找匹配项$where.这是缓慢的,无法索引的,也很尴尬.

    db.objects.find({$where: function() {
      for(var key in this.slotTypes) {
        if (this.slotTypes[key].usage == "json") return true;
      }
      return false;
    }})
    

    你应该阅读关于$的文件,以确保你理解它的注意事项,并且为了所有圣洁的爱,清理你对函数的输入; 这是在数据库上下文中执行的实时代码.

    2022-12-11 02:56 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有