mongodb - Mongodb在查询时仅从文档中获取匹配的对象
问题描述
我有一个来自 mongoimport 的 mongodb 数据库,看起来像这样
{
"_id" : ObjectId("5c209db2f6ba74c0f93709b7"),
"issues" : [
{
"id" : 20393,
"project" : {
"id" : 309,
"name" : "Name 1"
}
},
{
"id" : 30392,
"project" : {
"id" : 250,
"name" : "Name 2"
}
}
]
}
我使用这个查询:
db.tickets.find({"issues.project.id":309})
它将整个文档返回给我。我尝试使用
db.tickets.find( { "issues.project.id":309 }, {"issues":1} )
但是我得到了同样的东西,或者我只想要列表中匹配的对象而不是整个文档。
是否可以在 mongodb 中或者我应该更新数据库的结构?
谢谢大家
解决方案
如果查找字段不是唯一的,这是一种更安全的方法。我们用过滤后的版本“覆盖”原始issues
数组:
db.foo.aggregate([
{$match: {"issues.project.id": 309}}
,{$project: { issues: { $filter: {
input: "$issues",
as: "z",
cond: { $eq: [ "$$z.project.id", 309 ] }
}}
}}
推荐阅读
- c# - Winforms:迭代同一列的excel行时出错
- node.js - 如何将外部 API 响应保存到 Firebase
- node.js - 在 Live 服务器上托管我的 node.js 项目
- apache-kafka-streams - 如何避免从变更日志主题中提取时间戳以触发 Processor::punctuate
- angular - ionic 3 - 如何从相机插件 getPicture 方法触发“选择文件”
- python - 将文本拆分为列后仅保留最后一列的最简单方法
- dart - 将文本字段放置在 sliver 中时,键盘无法正确显示
- jquery - 在表单上使用 jQuery 更改操作和数据远程不起作用
- azure - 如何修复 vNet 对等模板
- jquery - Twitter-Typeahead 自动完成功能不起作用?