MongoDB Compass:对数组对象的过滤查询不起作用
Posted
技术标签:
【中文标题】MongoDB Compass:对数组对象的过滤查询不起作用【英文标题】:MongoDB Compass: Filter query on array object is not working 【发布时间】:2022-01-11 13:47:13 【问题描述】:我想根据提供的值过滤数组对象。 我在过滤器文本框中使用以下查询以及投影。似乎没有应用过滤器。
我也尝试过关注,但不幸的是数组没有被过滤
MissingPersonIds : $elemMatch: PhotoId : '2 - Copy (3).jpg'
过滤器:
"MissingPersonIds.PhotoId" : "2 - Copy (3).jpg"
投影:
MissingPersonIds : $slice: [1,10]
架构是:
[
"_id":
"$oid": "61ada7da9a30fd8471869bbc"
,
"ImportKeyId": 5843,
"MissingPersonIds": [
"PhotoId": "2 - Copy.jpg",
"Description": "Account ID not found"
,
"PhotoId": "2 - Copy (2).jpg",
"Description": "Account ID not found"
,
"PhotoId": "2 - Copy (3).jpg",
"Description": "Account ID not found"
,
"PhotoId": "2 - Copy - Copy.jpg",
"Description": "Account ID not found"
,
"PhotoId": "2 - Copy - Copy (2).jpg",
"Description": "Account ID not found"
]
]
我期待的输出是:
[
"_id":
"$oid": "61ada7da9a30fd8471869bbc"
,
"ImportKeyId": 5843,
"MissingPersonIds": [
"PhotoId": "2 - Copy (3).jpg",
"Description": "Account ID not found"
]
]
【问题讨论】:
【参考方案1】:您需要在投影中使用$filter
来过滤数组中的元素。
db.collection.find(,
"MissingPersonIds":
$filter:
input: "$MissingPersonIds",
cond:
"$eq": [
"$$this.PhotoId",
"2 - Copy (3).jpg"
]
)
Sample Mongo Playground
【讨论】:
以上是关于MongoDB Compass:对数组对象的过滤查询不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用 mongodb compass 在我的数据库中添加了一些 json 数据,并尝试使用 mongoose 获取数据,但得到的是空数组