我正在尝试使用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。 我究竟做错了什么?谢谢!
答案 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/