使用的位置操作。您可以使用.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" } ] }
你可以看到的位置操作實際上是因爲在第二個元素搜索foo
不返回命中......
> db.items.find({"association_chain.1.name": "foo"})
>
...但搜索bar
一樣。
> db.items.find({"association_chain.1.name": "bar"})
{ "_id" : ObjectId("516348865862b60b7b85d962"), "association_chain" : [ { "name" : "foo" }, { "name" : "bar" } ] }
你甚至可以指數這一具體領域沒有索引的所有關聯鏈文件的所有名稱:
> 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,
...
}
第二個代碼塊應該是'db.items.ensureIndex',而不是'.find' – 2013-06-16 22:11:23
的確如此 - 感謝您的接受! – Tilo 2013-06-17 16:21:14