使用javascript查询嵌入式文档

时间:2013-12-09 23:38:32

标签: mongodb mongoid

我在mongodb中有文件,我可以使用mongoid访问,如下所示:

{
  "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"
  }
}

我希望能够使用for_js方法查询它:

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

如果数据库中有单个文档,则此方法有效。如果有多个,则会出现此错误:

"TypeError: Cannot read property 'vault_id' of undefined near '==\"5088de6f12\"' "

任何帮助都将不胜感激。

罗伯特

1 个答案:

答案 0 :(得分:0)

您添加的新文档看起来没有vault_info属性。这意味着this.vault_info评估为undefined,您无法访问vault_id的任何属性(包括undefined)。

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

Model.where('vault_info.vault_id' => '5088de6f12')

Mongo智能地过滤掉所有缺少vault_info属性的文档,因此您不会在访问undefined的属性时遇到任何错误。 JavaScript并没有帮助你,所以如果你绝对必须使用for_js方法,你将不得不检查每一步。这看起来像是:

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

我建议您使用where方法。您发送给MongoDB的JavaScript越少越好。