首页 > 解决方案 > 在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:{...}}),但在这里我不知道键值。

那么,我该怎么做呢?

标签: node.jsmongodbmongoosemongodb-queryaggregation-framework

解决方案


$objectToArray您可以在 mongodb 3.4及更高版本中使用以下聚合

db.collection.aggregate([
  { "$addFields": {
    "field": { "$objectToArray": "$$ROOT" }
  }},
  { "$match": { "field.v.email": "abc@gmail.com" }},
  { "$project": { "field": 0 }}
])

推荐阅读