1. ホーム
  2. mongodb

[解決済み] 配列のサイズが1より大きい文書を検索します。

2022-02-07 09:32:36

質問

以下の形式のドキュメントを含むMongoDBコレクションを持っています。

{
  "_id" : ObjectId("4e8ae86d08101908e1000001"),
  "name" : ["Name"],
  "zipcode" : ["2223"]
}
{
  "_id" : ObjectId("4e8ae86d08101908e1000002"),
  "name" : ["Another ", "Name"],
  "zipcode" : ["2224"]
}

現在、特定の配列サイズに一致するドキュメントを取得することができます。

db.accommodations.find({ name : { $size : 2 }})

これは、2つの要素を持つドキュメントを正しく返します。 name の配列になります。しかし、私は $gt コマンドで name フィールドの配列サイズが 2 より大きい場合。

db.accommodations.find({ name : { $size: { $gt : 1 } }})

ですべてのドキュメントを選択するにはどうすればよいですか? name の配列で、サイズが1より大きい場合、(できれば現在のデータ構造を変更することなく)どうすればよいのでしょうか?

解決方法は?

更新してください。

mongodbのバージョンについて 2.2+ で説明されているより効率的な方法です。 JohnnyHK 別の 回答 .


1.使用方法 ここで

db.accommodations.find( { $where: "this.name.length > 1" } );

でも...

Javascriptは、ここに挙げたネイティブの演算子よりも実行速度が遅いです。 しかし、非常に柔軟性があります。サーバーサイド処理のページ をご覧ください。

2.作成 エクストラ フィールド NamesArrayLength を作成し、それを名前の配列の長さで更新して、クエリで使用します。

db.accommodations.find({"NamesArrayLength": {$gt: 1} });

これはより良いソリューションで、より高速に動作します (インデックスを作成できます)。