[解決済み] MongoDB コレクションのオブジェクト配列で、問い合わせた要素のみを取得する
2022-03-21 03:40:35
質問
私のコレクションに次のような文書があるとします。
{
"_id":ObjectId("562e7c594c12942f08fe4192"),
"shapes":[
{
"shape":"square",
"color":"blue"
},
{
"shape":"circle",
"color":"red"
}
]
},
{
"_id":ObjectId("562e7c594c12942f08fe4193"),
"shapes":[
{
"shape":"square",
"color":"black"
},
{
"shape":"circle",
"color":"green"
}
]
}
クエリを実行します。
db.test.find({"shapes.color": "red"}, {"shapes.color": 1})
または
db.test.find({shapes: {"$elemMatch": {color: "red"}}}, {"shapes.color": 1})
マッチしたドキュメントを返す
(ドキュメント1)
ただし、常にすべての配列項目が
shapes
:
{ "shapes":
[
{"shape": "square", "color": "blue"},
{"shape": "circle", "color": "red"}
]
}
ただし、ドキュメントを
(ドキュメント1)
を含む配列のみを使用します。
color=red
:
{ "shapes":
[
{"shape": "circle", "color": "red"}
]
}
どうすればいいのでしょうか?
どのように解決するのですか?
MongoDB 2.2の新機能
$elemMatch
プロジェクション演算子によって、返されるドキュメントが
最初
マッチング
shapes
要素を使用します。
db.test.find(
{"shapes.color": "red"},
{_id: 0, shapes: {$elemMatch: {color: "red"}}});
を返します。
{"shapes" : [{"shape": "circle", "color": "red"}]}
2.2 では、この操作は
$ projection operator
ここで
$
は、クエリで指定された配列要素のうち、最初にマッチするもののインデックスを表します。 以下は、上記と同じ結果を返します。
db.test.find({"shapes.color": "red"}, {_id: 0, 'shapes.$': 1});
MongoDB 3.2 アップデート
3.2 リリースから、新しい
$filter
集約演算子を使って、投影時に配列にフィルタをかけることができます。
すべて
にマッチした場合、最初の1つだけでなく
db.test.aggregate([
// Get just the docs that contain a shapes element where color is 'red'
{$match: {'shapes.color': 'red'}},
{$project: {
shapes: {$filter: {
input: '$shapes',
as: 'shape',
cond: {$eq: ['$$shape.color', 'red']}
}},
_id: 0
}}
])
結果
[
{
"shapes" : [
{
"shape" : "circle",
"color" : "red"
}
]
}
]
関連
-
Centos8でMongoDBをインストールする詳細な手順
-
MongoDBのログ切り出しの3つの方法のまとめ
-
[解決済み】MongoDBシェルですべてのコレクションを一覧表示するには?
-
MongoDB総合まとめ
-
[解決済み] コマンドラインからMongoDBデータベースを削除する方法を教えてください。
-
[解決済み] コレクション内のすべてのキーの名前を取得する
-
[解決済み】MongoDBでデータのバージョニングを実装する方法
-
[解決済み] Mongoose のエラー Cast to ObjectId failed for value XXX at path "_id" とは何ですか?
-
[解決済み] CAPの定理でmongodbはどこに位置するのか?
-
[解決済み] Mongoose を使って MongoDB ドキュメントからキーを削除する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MongoDB ormフレームワークの注意点と簡単な使い方
-
MongoDBプライマリシャード概要
-
MongoDB にシャードレプリカセットを追加する方法
-
MongoTemplateのidによるクエリがNULLの場合について
-
MongoDBレプリカセットの構築プロセス
-
[解決済み] mongodb は複数のフィールドで値をグループ化します。
-
[解決済み】MongoDB データベースに画像を保存する
-
[解決済み】フィルタリング用途のelasticsearch v.s. MongoDB【クローズド
-
[解決済み] mongoDBがデータを保存している場所を知るにはどうすればよいですか?(デフォルトの/data/dbにはありません!)
-
[解決済み] PyMongoで正規表現クエリを実行する