node.js - 在mongodb中查找密钥未知的时间
问题描述
如何在 mongoDB 中获取电子邮件为abc@gmail.com的数据?我不知道密钥名称,我想遍历所有数据。
我有这样的数据:
{
"_id":"5c0a1589a5a41b2ae707317b",
"test1":{
"email":"abc@gmail.com",
"phoneNo":"123456897",
"endpointId":"test1"
}
}
{
"_id":"5c0a1989a5a41b2ae807317b",
"test2":{
"email":"abc@gmail.com",
"phoneNo":"123456897",
"endpointId":"test2"
}
}
{
"_id":"5c0a1989a5a41b2ae807317b",
"test2":{
"email":"pqr@gmail.com",
"phoneNo":"123456897",
"endpointId":"test3"
}
}
但是在搜索时不知道对象键。我想遍历所有数据并获取具有特定电子邮件的匹配数据。
如果我知道 test1、test2 等键名,那么我可以使用find({test1:{...}})
,但在这里我不知道键值。
那么,我该怎么做呢?
解决方案
$objectToArray
您可以在 mongodb 3.4及更高版本中使用以下聚合
db.collection.aggregate([
{ "$addFields": {
"field": { "$objectToArray": "$$ROOT" }
}},
{ "$match": { "field.v.email": "abc@gmail.com" }},
{ "$project": { "field": 0 }}
])
推荐阅读
- apache-flink - 如何在 Apache Flink 中创建外部目录表
- c++ - CUDA: Fill matrix with results of summation
- java - 获取用户输入,然后使用 AWT 打印新文本
- javascript - How to fix get request and response with whole html
- symfony - 定义“nelmio_cors”不支持配置键“defaults”
- c# - WPF 组合框似乎导致 InvalidCastException
- mysql - SQL日期间隔不适用于AND子句
- c# - 如果 int 值等于 x 替换为字符串
- android - Putting ImageView in front of other elements < 21API
- reactjs - How to correctly validate an masked-input using material-ui, formik, yup, and react-input-mask?