javascript - 如何在不知道 mongodb 中的父键的情况下查找特定的嵌套对象
问题描述
我正在使用 javascript 和 mongoose 模块。我有一个像这样的对象
my_object = {
ShopName: String,
employees: [String],
info: {
NameEmployee_1: {
age: String,
work: String,
city: String,
},
NameEmployee_2: {
age: String,
work: String,
city: String,
}
}
}
我想找到所有具有特定年龄但不知道员工姓名的员工,有没有办法做到这一点?
我知道你例如我可以这样
db.collection.find({'info.Max': {$exists: true}})
查找至少有一名员工姓名为 Max 的所有商店,但如果我想要所有至少有一名员工年龄为 33 岁的商店怎么办
db.collection.find({'info.<name>.age': '33'})
?
解决方案
您可以使用$ objectToArray(mongoDB 3.4.4 及更高版本)、$filter并$project
获得如下内容:
db.collection.aggregate([
{
$project: {
obj: {
$objectToArray: "$info"
}
}
},
{
$project: {
_id: 0,
obj: {
$filter: {
input: "$obj",
as: "item",
cond: {
$eq: [
"$$item.v.city",
"NY"
]
}
}
}
}
},
{
$project: {
info: {
$arrayToObject: "$obj"
}
}
},
])
你可以看到它在这里工作
这个想法是将对象分解为数组,对其进行过滤,然后将该数组转换回对象。
我过滤了,city
但我相信你明白了。
推荐阅读
- python - Discord.py 中的丰富嵌入按钮
- c++ - 使用元素指针删除列表元素
- spring-boot - Spring 控制器单元测试
- spring - Ignite 2.9 SpringCacheManager 中的 NPE
- python - OpenCV:为了显示视频,为什么while循环有2个变量设置为myVideo.read()
- aem - lombok 委托模式没有为 Tabs 组件返回 model.json(Json Exporter) 中的所有方法
- json - 我如何将数据从 xcode 项目发送到个人网站,然后返回不同的数据?
- reactjs - 如何将 Babel 预设命令行选项移动到 babel.config.json 文件?
- java - java类在groovy脚本中导入时在本地工作,但在加载到jenkins管道时不工作
- django - GeoDjango:如何根据点和半径在地球上的任何地方创建一个圆?