Mongodb FormBuilder访问二级属性(点表示法)

Mongodb FormBuilder访问二级属性(点表示法),mongodb,angular,angular2-forms,Mongodb,Angular,Angular2 Forms,我正在使用Angular2的FromBuilder构建一个查询以发送到后端MongoDB。问题是,我正在尝试访问二级属性。例如,我有一首歌,其中有一个流派数组。例如,我想访问genres.hipHop,但无法将表单组设置为genres.hipHop。我所能做的就是用一个词 下面是我想要构建的一个查询示例 { "where": { "and": [ {"genres.house": {"exists": "true"}} ] }, "order": "cre

我正在使用Angular2的FromBuilder构建一个查询以发送到后端MongoDB。问题是,我正在尝试访问二级属性。例如,我有一首歌,其中有一个流派数组。例如,我想访问genres.hipHop,但无法将表单组设置为genres.hipHop。我所能做的就是用一个词

下面是我想要构建的一个查询示例

{
  "where": {
    "and": [
      {"genres.house": {"exists": "true"}}
    ]
  },
  "order": "created DESC"
};
我的FormBilder看起来像这样:

this.queryForm = this._formBuilder.group({
  where: this._formBuilder.group({
    and: this._formBuilder.array([
      this._formBuilder.group({
        genres : this._formBuilder.group({  <-- need it be genres.hipHop
          exists: true
        })
      })
    ]),
    order: 'created DESC',
  })
});
我无法在流派之后添加.hipHop

我尝试将流派hipHop嵌套在流派中,但当我将其发送到后端时,它无法识别hipHop。这是生成的查询:

{ "where": { 
  "and": [ 
    { "genres": 
      { "hipHop": { "exists": true } } 
    } 
  ], 
  "order": "created DESC" } 
}
这就是我得到的错误:

"MongoError: unknown operator: $hipHop\n 
以下是歌曲对象的示例:

{
    "title": "Sweet Talk feat. Quinn XCII (Evan Gartner Remix)",
    "artist": "Academy",
    "audio": "https://api.soundcloud.com/tracks/270500010/stream?client_id=90d140308348273b897fab79f44a7c89",
    "image": "https://i1.sndcdn.com/artworks-000168676452-qkxqul-t500x500.jpg",
    "download": "http://stereoload.com/academy/quinn-xcii-x-academy-sweet-talk-evan-gartner-remix",
    "url": "http://soundcloud.com/academy401/sweettalkremix",
    "created": "2016-12-13T09:21:28.071Z",
    "genres": {
      "hipHop": 30,
      "house": 30,
      "pop": 40
    },
    "rank": 0
  }

谢谢大家!

我认为您不能在这里使用点符号,因为它不是有效的键

查看源代码中的这一行:

看起来像是Angular在关键点上迭代来构建控件。由于在javascript中不能将x.y作为键,因此此操作失败

范例

var x = {y.z = "a"} //--> Uncaught SyntaxError: Unexpected token .
我认为你必须在你的风格表单组中制作另一组键——例如,其中一个键可以是hiphop。如果您想添加更多的类型,您可能希望这样做:

编辑:

范例-

this.queryForm = this._formBuilder.group({
  where: this._formBuilder.group({
    and: this._formBuilder.array([
      this._formBuilder.group({
        genres : this._formBuilder.group({
          hiphop : this._formBuilder.group({
              exists: true
          })
        })
      })
    ]),
    order: 'created DESC',
  })
});

您是否尝试将对象键定义为字符串genres.hipHop


哦,好吧,我有点明白了。你能给我举个简单的例子吗?谢谢我将用一个可能的示例编辑这个问题-它看起来与您已经在做的事情类似!:哦,好的,我明白了。所以我尝试了这个,但是我从后端得到了一个错误:S。还有其他想法吗?是的,这就是我最后做的。谢谢你,尤里!你知道我将如何为此构建HTML表单吗?拥有嵌套的组让我感到困惑。
this.queryForm = this._formBuilder.group({
  where: this._formBuilder.group({
    and: this._formBuilder.array([
      this._formBuilder.group({
        genres : this._formBuilder.group({
          hiphop : this._formBuilder.group({
              exists: true
          })
        })
      })
    ]),
    order: 'created DESC',
  })
});
this.queryForm = this._formBuilder.group({
  where: this._formBuilder.group({
    and: this._formBuilder.array([
      this._formBuilder.group({
        "genres.hipHop" : this._formBuilder.group({
          exists: true
        })
      })
    ]),
    order: 'created DESC',
  })
});