MongoDB将在find函数中返回所有结果

时间:2019-05-29 23:30:33

标签: node.js mongodb find

我正在尝试使用MongoDB执行简单查找,这是我的新手,所以我不知道出了什么问题,但是看来它总是带来所有结果而没有过滤它。

您可以在此处运行代码,看看发生了什么: https://mongoplayground.net/

收藏-粘贴在这里https://mongoplayground.net/-第一个文本区域

[
  {
    "collection": "collection",
    "count": 10,
    "content": [
      {
        "_id": "apples",
        "qty": 5
      },
      {
        "_id": "bananas",
        "qty": 7
      },
      {
        "_id": "oranges",
        "qty": {
          "in stock": 8,
          "ordered": 12
        }
      },
      {
        "_id": "avocados",
        "qty": "fourteen"
      }
    ]
  }
]

查找-在此处粘贴https://mongoplayground.net/-第二个文本区域

db.collection.find({
  "content.qty": 5
})

检查结果,您将看到整个JSON。 我究竟做错了什么?谢谢!

2 个答案:

答案 0 :(得分:0)

您可以在$filter之后将$project$match一起使用,以便仅从数组中获取一项:

db.collection.aggregate([
  { $match: { "content.qty": 5 }},
  {
    $project: {
      collection: 1,
      count: 1,
      content: {
        $filter: {
          input: "$content",
          as: "item",
          cond: { $eq: [ "$$item.qty", 5 ]
          }
        }
      }
    }
  }
])

无需放松,等等。$find返回的第一个匹配的文档就可以了,在您的情况下,它就是主要文档。

看到它正常工作here

答案 1 :(得分:0)

首先,查询将带回它应该做什么。它为您带来了满足您查询条件的文档,请尝试在搜索到的数组中添加元素或更多元素以查看区别。 其次,要达到的目的(仅获取嵌套数组中的特定元素)可以通过聚合来完成,您可以在此处阅读更多内容: https://docs.mongodb.com/manual/aggregation/