【问题标题】:How to get a mongoose query to return only specific field inside of a document using Mongoose/ MongoDB?如何使用 Mongoose/MongoDB 获取 mongoose 查询以仅返回文档中的特定字段?
【发布时间】:2021-01-29 16:48:33
【问题描述】:

我正在尝试编写一个菜单管理器,我可以在其中更新删除并创建新的菜单项和类别。我需要获取一个查询以仅返回菜单项,而不是文档中的所有其他类别数据。

我该怎么做?

这是架构:

{
   Categories:
     name: ffjs,
     id: fhsjd,
     menu_items: [
       item1: {
         name: fhrse,
         ingredients: [jksf,sjdfk,fjd]
       }, ...
    ]
}

我希望查询只返回 item1、item2、item3 等,但无法使查询正常工作。

我试过了:

Categories.find({"items" : $all})
Categories.find({}).select("items")

我还尝试查询特定项目以进行测试,并且只返回完整文档,例如:

Categories.find({"items.name" : "ramen"})
Categories.find({items :{"$elemMatch" : {name: "ramen"}}}, {"items.name" :1})

【问题讨论】:

  • 能否请您展示您的尝试?
  • 刚刚为你更新了:)

标签: node.js mongodb mongoose


【解决方案1】:

解决方案 1: 您可以使用聚合方法来实现它,检查如下:

Categories.aggregate([
    { $match: { $and: [{id: "fhsjd" }, { "items.name" : "ramen" } ] } },
    { $project: { _id: 0, menu_items: 1 } }
  ])

这里你可以 $match 查询和 $project 过滤器(0:排除和 1 包括)

解决方案 2: 要返回特定记录,请使用以下命令:

Categories.find({ "items.name" : "ramen" }, { items: 1, _id: 0 })

要退回所有项目,请使用以下命令:

Categories.find({}, { items: 1, _id: 0 })

希望其中一种解决方案适合您。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-01-20
  • 2014-02-01
  • 2017-04-26
  • 1970-01-01
  • 2016-01-11
  • 1970-01-01
  • 1970-01-01
  • 2012-10-17
相关资源
最近更新 更多