如何仅获取数组中的元素-mongodb [重复]

Posted

技术标签:

【中文标题】如何仅获取数组中的元素-mongodb [重复]【英文标题】:How to get only element in array - mongodb [duplicate] 【发布时间】: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 可以用作占位符。

【问题讨论】:

【参考方案1】:

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

如文档中所述:

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

试试这个查询:

db.collection.find(,

  "menu": 
    "$elemMatch": 
      "menu_id": ObjectId("611fe0b60734048a04812020")
    
  
)

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

例如here。

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

【讨论】:

以上是关于如何仅获取数组中的元素-mongodb [重复]的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB - 仅投影数组中的匹配元素

如何从js中的数组中删除元素[元素来自mongodb] [重复]

如何从js中的数组中删除元素[元素来自mongodb] [重复]

在MongoDB中获取数组的第n个元素

在MongoDB中获取数组的第n个元素

仅删除(更新查询)数组mongodb数组中的特定元素?