And*_*rew 2 ruby-on-rails mongodb mongoid mongoid3
我有一个包含数组的文档:
{
_id: ObjectId("515e10784903724d72000003"),
association_chain: [
{
name: "Product",
id: ObjectId("4e1e2cdd9a86652647000003")
}
],
//...
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试在集合中搜索数组中name第一项association_chain与给定值匹配的文档.
我怎么能用Mongoid做到这一点?或者,如果您只知道如何使用MongoDB完成此操作,如果您发布一个示例,那么我可能想知道如何使用Mongoid.
使用位置运算符.您可以使用.0(和第二个.1等)查询数组的第一个元素.
> db.items.insert({association_chain: [{name: 'foo'}, {name: 'bar'}]})
> db.items.find({"association_chain.0.name": "foo"})
{ "_id" : ObjectId("516348865862b60b7b85d962"), "association_chain" : [ { "name" : "foo" }, { "name" : "bar" } ] }
Run Code Online (Sandbox Code Playgroud)
您可以看到位置运算符生效,因为在foo第二个元素中搜索不会返回命中...
> db.items.find({"association_chain.1.name": "foo"})
>
Run Code Online (Sandbox Code Playgroud)
......但是寻找bar确实.
> db.items.find({"association_chain.1.name": "bar"})
{ "_id" : ObjectId("516348865862b60b7b85d962"), "association_chain" : [ { "name" : "foo" }, { "name" : "bar" } ] }
Run Code Online (Sandbox Code Playgroud)
您甚至可以索引此特定字段,而无需索引所有关联链文档的所有名称:
> db.items.ensureIndex({"association_chain.0.name": 1})
> db.items.find({"association_chain.0.name": "foo"}).explain()
{
"cursor" : "BtreeCursor association_chain.0.name_1",
"nscanned" : 1,
...
}
> db.items.find({"association_chain.1.name": "foo"}).explain()
{
"cursor" : "BasicCursor",
"nscanned" : 3,
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1510 次 |
| 最近记录: |