それぞれ配列を持ついくつかの単純なjsonドキュメントを作成して挿入しました:
MongoDB shell version: 2.4.6
use test
> db.sandbox.insert({ "array1" : [ "praxis a", "value b", "theory c"] })
> db.sandbox.insert({ "array1" : [ "mean d", "minimum e"] })
> db.sandbox.insert({ "array1" : [ "maximum f"] })
次に、文字列「field1」で始まる array1 値を含むコレクション内のドキュメントを検索しました。
> db.sandbox.find({"array1" : /praxis/})
これにより、予想どおり、単一のドキュメントが返されました。
{ "_id" : ObjectId("52585223b8a783860470f07b"), "array1" : [ "praxis a", "value b", "theory c" ] }
しかし、私が本当に望んでいたのは、一致した array1 フィールド値のみを返すことでした。そこで、配列から最初に一致するアイテムを射影しようとしました:
> db.sandbox.find({"array1" : /praxis/}, {_id: 1, "array1.$": 1})
これを試したところ、奇妙なエラーが発生しました。
error: {
"$err" : "positional operator (array1.$) requires corresponding field in
query specifier",
"code" : 16352
}
私が取り戻したいと思っていたのは、値でした:
"field1: a"
私が落ち着くと思ったのは、配列を取り戻すことでした:
{ "array1: [ "praxis a", "value b", "theory c"] }
find 関数と $ match を使用して配列から値を射影する方法についての助けをいただければ幸いです...