次の形式のドキュメントを含む MongoDB コレクションがあります。
{
"_id" : ObjectId("4e8ae86d08101908e1000001"),
"name" : ["Name"],
"zipcode" : ["2223"]
}
{
"_id" : ObjectId("4e8ae86d08101908e1000002"),
"name" : ["Another ", "Name"],
"zipcode" : ["2224"]
}
現在、特定の配列サイズに一致するドキュメントを取得できます。
db.accommodations.find({ name : { $size : 2 }})
これは、配列に 2 つの要素を持つドキュメントを正しく返します。ただし、フィールドの配列サイズが 2 より大きいすべてのドキュメントを返すコマンドはname
実行できません。$gt
name
db.accommodations.find({ name : { $size: { $gt : 1 } }})
1 より大きいサイズの配列を持つすべてのドキュメントを選択するにはどうすればよいですかname
(できれば現在のデータ構造を変更せずに)?
ベストアンサー1
MongoDB 2.2 以降では、クエリ オブジェクト キーで数値配列インデックス (0 ベース) を使用できるため、これをより効率的に実行できます。
// Find all docs that have at least two name array elements.
db.accommodations.find({'name.1': {$exists: true}})
部分的なフィルター式を使用するインデックスを使用して、このクエリをサポートできます (3.2 以降が必要)。
// index for at least two name array elements
db.accommodations.createIndex(
{'name.1': 1},
{partialFilterExpression: {'name.1': {$exists: true}}}
);