【问题标题】:How to get only element in array - mongodb [duplicate]如何仅获取数组中的元素-mongodb [重复]
【发布时间】:2021-10-29 03:39:24
【问题描述】:

您好,对不起,我是 nosql 和 mongodb 的新手,请帮帮我 这是我的示例数据

[
  {
    "_id": ObjectId("611532b19c6e77ad0fd50c1c"),
    "status": true,
    "role_name": "DEVELOPER",
    "descr": "DEVELOPER",
    "menu": [
      {
        "permissions": [
          ObjectId("60eeabbc9ca3e3a4f03ff5ee"),
          ObjectId("611125cad17b0c71595298d4"),
          ObjectId("6113e8d69c6e77ad0fd50c08"),
          ObjectId("61279df3f544f6c2db48b92d"),
          ObjectId("612a3f061a1fcead8871e821")
        ],
        "_id": ObjectId("612a46c41a1fcead8871e83f"),
        "menu_id": ObjectId("611fe0b60734048a04812020")
      },
      {
        "permissions": [
          ObjectId("60eeabbc9ca3e3a4f03ff5ee"),
          ObjectId("611125cad17b0c71595298d4"),
          ObjectId("6113e8d69c6e77ad0fd50c08"),
          ObjectId("61279df3f544f6c2db48b92d"),
          ObjectId("612a3f061a1fcead8871e821")
        ],
        "_id": ObjectId("612a46c41a1fcead8871e840"),
        "menu_id": ObjectId("611fee7e0734048a04812022")
      },
      {
        "permissions": [
          ObjectId("60eeabbc9ca3e3a4f03ff5ee"),
          ObjectId("611125cad17b0c71595298d4"),
          ObjectId("6113e8d69c6e77ad0fd50c08"),
          ObjectId("61279df3f544f6c2db48b92d"),
          ObjectId("612a3f061a1fcead8871e821")
        ],
        "_id": ObjectId("612a46c41a1fcead8871e841"),
        "menu_id": ObjectId("6128c64f9bd697e83dbe47b1")
      },
      {
        "permissions": [
          ObjectId("60eeabbc9ca3e3a4f03ff5ee"),
          ObjectId("611125cad17b0c71595298d4"),
          ObjectId("6113e8d69c6e77ad0fd50c08"),
          ObjectId("61279df3f544f6c2db48b92d"),
          ObjectId("612a3f061a1fcead8871e821")
        ],
        "_id": ObjectId("612a46c41a1fcead8871e842"),
        "menu_id": ObjectId("6128c5e19bd697e83dbe47ac")
      }
    ],
    "createdAt": ISODate("2021-08-12T14:39:45.505+0000"),
    "updatedAt": ISODate("2021-08-28T14:23:00.040+0000"),
    "__v": NumberInt(10)
  }
]

当我输入 menu_id = ObjectId("611fe0b60734048a04812020") 时想要得到什么

 {
    "permissions" : [
        ObjectId("60eeabbc9ca3e3a4f03ff5ee"), 
        ObjectId("611125cad17b0c71595298d4"), 
        ObjectId("6113e8d69c6e77ad0fd50c08"), 
        ObjectId("61279df3f544f6c2db48b92d"), 
        ObjectId("612a3f061a1fcead8871e821")
    ], 
    "_id" : ObjectId("612a46c41a1fcead8871e83f"), 
    "menu_id" : ObjectId("611fe0b60734048a04812020")
}, 

这是我的查询

db.getCollection("tbl_roles").find(
 { "menu.menu_id": ObjectId("611fe0b60734048a04812020") }
 )

-- 仅用于发布问题的无意义词 在出版和平面设计中,Lorem ipsum 是一种占位符文本,通常用于演示文档或字体的视觉形式,而不依赖于有意义的内容。在最终副本可用之前,Lorem ipsum 可以用作占位符。

【问题讨论】:

    标签: database mongodb mongoose nosql nosql-aggregation


    【解决方案1】:

    您可以使用$elemMatch,它只返回数组中匹配的第一个元素。

    如文档中所述:

    $elemMatch 运算符将查询结果中的字段内容限制为仅包含与 $elemMatch 条件匹配的 first 元素。

    试试这个查询:

    db.collection.find({},
    {
      "menu": {
        "$elemMatch": {
          "menu_id": ObjectId("611fe0b60734048a04812020")
        }
      }
    })
    

    请注意,您还可以在find 对象like this 中添加一些匹配项

    例如here

    此外,如果出于某种原因需要从数组中获取多个结果,您可以使用 aggregate 查询,例如 this one

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-30
      • 2021-09-23
      • 2022-01-08
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      相关资源
      最近更新 更多