如何在mongo中查找包含数组内部属性的文档

马可·斯瓦列克

在阅读了所有可以想到的在线资源后,仍然无法想到该解决方案。基本上,我在mongo中有包含以下数据的文档:

// 1
{
  a: {
    b: {
      languages: {
        en: {
          text: "en",
          type: "secret"
        },
        de: {
          text: "de"
        }
      }
    }
  }
}
//2
{
  a: {
    b: {
      languages: {
        fr: {
          text: "fr"
        },
        de: {
          text: "de",
          type: "public"
        }
      }
    }
  }
},

这将返回我的第一个文档,无论我将其更改为什么都无所谓secret

db.products.findOne({"a.b.languages": {$exists: {$elemMatch: {"type": {$eq: "secret"}}}}}, {"key": 1, "a.b.languages": 1})

我需要的是所有包含某种类型语言的文档-此字段也是可选的。我该如何构造这样的查询?

另外,如果此问题是标准问题,请向我提供信息,以便我可以更新问题。

米克尔

您在这里遇到的问题是文档中没有数组-您只有带有未知键的嵌套对象。要查询这种结构,您需要使用$ objectToArray运算符将这些嵌套文档转换为数组

db.col.aggregate([
    {
        $addFields: {
            languages: { $objectToArray: "$a.b.languages" }
        }
    },
    {
        $match: { "languages.v.type": "secret" }
    },
    {
        $project: { languages: 0 }
    }
])

上面的代码会将a.b.languagespath转换为键和值的数组(带有k和的对象v),因此您可以直接查询引用languages.v.type$addFields$project用于生成然后删除可以查询的临时字段。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在mongo中查找不包含数组元素的文档

如何在代码中设置按钮的内部属性?

如何在数组中查找包含一定数量的嵌入/嵌套文档的文档

如何在MongoDB中的项目数组中查找包含非空数组的文档

如何访问本身指向带有 Angular 的数组的 TypeScript 文件中的内部属性

如何在协议中设置读写内部、只读外部属性

如何在 MongoDB 中查找包含一个或多个搜索数组元素的文档?

如何在嵌套数组中使用查找和搜索文档(在查找内部)获取文档

如何在mongo中查找满足多个条件的文档?

如何在mongodb中查找文档并使用聚合查找属性?

MongoDB:如何在不指定数组索引的任何字段的子文档中查找包含字符串的文档?

如何在基于父属性的数组中查找和更新子文档

如何在Mongo聚合中合并文档中的数组字段

如何在mongo Db中增加文档数组中的字段?

如何在MongoDB中查找包含%或$的文档值?

在单个内部属性上查找匹配的数组内容和长度

如何在项目位于数组中的地方返回mongo文档?

如何在Mongo DB中合并文档数组

如何在Mongo DB中合并数组和文档字段

如何在mongo中过滤子数组并返回文档

查找任何在数组属性中包含通过MongoDB传递给查询的数组中任何元素的子字符串的文档

如何在Maven中读取外部属性文件

如何在Rails中以选择形式访问外部属性?

如何在MongoDB中查找大于文档大小的数组

如何在MongoDB中查找并插入子文档数组列表?

Mgo如何在嵌套数组中查找嵌套文档?

如何在mongodb中查找数组大小大于1的文档

如何在 mongoDB 文档中查找和打印对象数组

Swift-如何使内部属性可选