.find()使用动态属性名称的嵌套对象

时间:2017-09-20 09:52:08

标签: javascript node.js mongodb

我需要使用Node.js驱动程序在MongoDb中找到嵌套对象。

属性名称为动态时,我无法访问嵌套属性。这是我的代码:

//This gives expected results but "name1" isn't dynamic
collection.find({ 'followers.name1': { $exists: false } })

//Here's what I tried that does not give expected results
const username = "name1"
let query = { followers: {} }
query.followers[username] = { $exists: false } 

collection.find(query)

以下是数据库结构的一个示例:

{
   "_id":"xxxxxxxxxxx",
   "dateAdded":"2017-09-20T08:36:40.325Z",
   "followers":{
      "name1":{
         "followedOn":"2017-09-20T08:36:40.325Z",
         "unfollowedOn":null
      },
      "name2":{
         "followedOn":"2017-09-20T08:36:40.325Z",
         "unfollowedOn":null
      }
   }
}

编辑:我的问题与标记为重复的问题不重复。 MongoDb find()参数不是对象文字。这就是我的问题的全部要点,像对象文字那样使用它并不起作用。

1 个答案:

答案 0 :(得分:0)

我最终找到了解决方案。密钥需要是一个字符串,所以你需要这样做:

const username = 'name1'
let query = {}
query['followers.'+username] = { $exists: false } 

collection.find(query)