Mongodb 用javascript查询嵌入式文档

Mongodb 用javascript查询嵌入式文档,mongodb,mongoid,Mongodb,Mongoid,我使用mongoid访问mongodb中的文档,如下所示: { "first_name": "Clarke", "last_name": "Kent", "vault_info": { "container": "names", "created_at": "2013-12-09T23:18:07.963Z", "updated_at": "2013-12-09T23:18:07.963Z", "vault_id": "4dc08baa97" }

我使用mongoid访问mongodb中的文档,如下所示:

{
  "first_name": "Clarke",
  "last_name": "Kent",
  "vault_info": {
    "container": "names",
    "created_at": "2013-12-09T23:18:07.963Z",
    "updated_at": "2013-12-09T23:18:07.963Z",
    "vault_id": "4dc08baa97"
  }
}
Model.for_js('this.vault_info.vault_id=="5088de6f12"')
Model.where('vault_info.vault_id' => '5088de6f12')
我希望能够使用for_js方法查询它,如下所示:

{
  "first_name": "Clarke",
  "last_name": "Kent",
  "vault_info": {
    "container": "names",
    "created_at": "2013-12-09T23:18:07.963Z",
    "updated_at": "2013-12-09T23:18:07.963Z",
    "vault_id": "4dc08baa97"
  }
}
Model.for_js('this.vault_info.vault_id=="5088de6f12"')
Model.where('vault_info.vault_id' => '5088de6f12')
如果数据库中只有一个文档,则此操作有效。如果有多个,则会出现以下错误:

"TypeError: Cannot read property 'vault_id' of undefined near '==\"5088de6f12\"' "
任何帮助都将不胜感激


Robert

看起来您要添加的新文档上没有vault\u info属性。这意味着this.vault_info的计算结果为未定义,您无法访问任何属性,包括未定义的vault_id

如果不必使用for_js方法,只需使用where方法,如下所示:

{
  "first_name": "Clarke",
  "last_name": "Kent",
  "vault_info": {
    "container": "names",
    "created_at": "2013-12-09T23:18:07.963Z",
    "updated_at": "2013-12-09T23:18:07.963Z",
    "vault_id": "4dc08baa97"
  }
}
Model.for_js('this.vault_info.vault_id=="5088de6f12"')
Model.where('vault_info.vault_id' => '5088de6f12')
Mongo智能地过滤掉所有缺少vault_info属性的文档,这样您就不会在访问未定义文档的属性时出错。JavaScript并不能像这样帮助您,所以如果您确实必须使用for_js方法,那么您必须检查每个步骤。这看起来像:

Model.for_js('this.vault_info && this.vault_info.vault_id=="5088de6f12"')

不过,我鼓励您使用where方法。发送给MongoDB的JavaScript越少越好。

为什么要使用JavaScript执行该查询?我希望我的用户通过JavaScript访问他们的数据。这是非常低效的,而不是MongoDB最好的表现。