【问题标题】:Querying a documents with nested array in mongoDB在 mongoDB 中使用嵌套数组查询文档
【发布时间】:2020-04-29 13:29:28
【问题描述】:

编辑:以下查询是从 DataGrip 执行的,mongodb 版本 4.2.6

我对 mongoDB 还很陌生,我正在研究大量文档,但无法弄清楚这是如何工作的。

我的收藏是这样的:

db.cards.insertMany([
{
  "Name": "SingleFaced Card",
  "Face": [
    {"Type": "Front", "Color": ["Black"]},
  ]
},
{
  "Name": "DoubleFaced Card",
  "Face": [
    {"Type": "Front", "Color": ["Black"]},
    {"Type": "Back", "Color": ["Red", "Yellow"]}
  ]
},
]);

我想查询至少有一张具有给定颜色的面的卡片,例如Red

我尝试了很多不同的选项,所有选项都给了我0的计数。

db.cards.count({"Face.Color": "Red"}); // 0 record
db.cards.count({"Face.Color": ["Red"]}) // 0 record
db.cards.count({"Face.Color": {$elemMatch:{$in:['Red']}}}) // 0 record
db.cards.count({"Face.Color": {$elemMatch:{$all:['Red']}}}) // 0 record
db.cards.count({"Face.Color": {$elemMatch:{$elemMatch:{$in:['Red']}}}}); // 0 record

我最初认为我的安装有问题,但下面对嵌套字段的查询有效。

db.cards.count({"Face.Type" : "Front"}); // 2 record
db.cards.count({"Face.Type" : "Back"}); // 1 record

关于我应该如何进行这项工作的任何建议?我在这里使用了错误的设计选择吗?

【问题讨论】:

    标签: mongodb mongodb-query nosql


    【解决方案1】:

    您的第三个查询already works

    db.cards.count({ "Face.Color": { $elemMatch: { $in: ['Red'] } } }) 
    

    【讨论】:

    • 感谢您的链接!我对环境做了一些比较。我在 mongodb 4.2.6 上通过 JetBrain 的 DataGrip 运行示例。我已将 db 版本降级为 4.2.5 并从 python 包pymongo 重新运行查询,现在可以使用了。 DataGrip 或 4.2.6 版可能存在错误
    猜你喜欢
    • 1970-01-01
    • 2018-03-09
    • 2019-10-09
    • 2021-04-14
    • 2018-07-27
    • 1970-01-01
    • 2021-02-25
    • 2016-08-16
    相关资源
    最近更新 更多