mongodb - mongo の複雑なクエリの問題
我想大声告诉你
我想大声告诉你 2017-05-02 09:25:22
0
4
786

オリジナルの json

リーリー

クエリしたい結果:

リーリー

db.xxx.find() の書き方を教えてください

我想大声告诉你
我想大声告诉你

全員に返信(4)
刘奇

まずコメントさせてください:

質問して、を最小限に抑える再現性のあるの問題の例を投稿してください。このような長い文書を投稿すると、誰もがとても読むでしょう。 。


実際に必要なのは、配列全体ではなく、 配列内の特定のドキュメント を返すことです。

1 配列内の要素を 1 つだけ返す必要がある場合

リーリー

1行目はクエリ条件、2行目はフィルタ条件です。 演算子はフィルター条件でも使用できることがわかります。ただし、この演算子は条件を満たす最初の要素のみを返します。 には MongoDB バージョン 2.2 以降が必要です

または、$ 添字セレクターを使用します: $下标选择符:

db.xxx.find(
    {'contents.standardID': '9527-01'},
    {contents: {$elemMatch: {standardID: '9527-01'}}, _id: 0}
)

上面例子中的查询条件也可以使用$elemMatch

如果你需要返回数组中多个匹配的元素:

2 $unwind

通过把$unwind来把contents作为一个独立的文档流来进行操作,代码见@bguo的回答。
但是如果你的数组很大,这会导致性能问题。

3 $filter

这是一个3.2版本中新出的操作符,用来过滤返回的内容。

db.xxx.find(
    {'contents.standardID': '9527-01'},
    {'contents.$': 1, _id: 0}
)

当然你还可以使用$redact(2.6版本), 或者mapReduce() リーリー

上記の例のクエリ条件では、$elemMatch を使用することもできます。 #🎜🎜# #🎜🎜#配列内の複数の一致する要素を返す必要がある場合: #🎜🎜# #🎜🎜#2 $unwind#🎜🎜# #🎜🎜# $unwind を使用して、contents を独立したドキュメント ストリームとして操作します。コードについては、@bguo の回答を参照してください。
ただし、配列が大きい場合は、パフォーマンスの問題が発生する可能性があります。 #🎜🎜# #🎜🎜#3 $filter#🎜🎜# #🎜🎜#これは 3.2 バージョンの新しい演算子で、返されたコンテンツをフィルターするために使用されます。 #🎜🎜# リーリー #🎜🎜#もちろん、$redact (バージョン 2.6)、mapReduce()、その他多くのメソッドを使用することもできます。 #🎜🎜#
いいねを押す +0
为情所困

クエリ条件。たとえば名前

リーリー
いいねを押す +0
给我你的怀抱

それを実装する 1 つの方法: MongoDB の Aggregate を使用します。

1. まず、配列を含むコンテンツに $unwind を適用します

2. 次に、$match を使用してフィルタリング条件を適用します

3. 最後に、$project を使用して必要なフィールドを保持します

以下のコードを参照してください

リーリー

ご参考までに。

MongoDB を愛してください!

--------------------------ゴージャスなセパレーター--------------------- -- --------

MongoDB 中国語コミュニティには多くのオフライン アクティビティがあります。以下をクリックしてください:

2017 華山剣ディスカッション|MongoDB 中国語コミュニティ

3月には杭州駅が登場します! ! ! 興味のあるお友達は急いで登録してください! ! !

いいねを押す +0
给我你的怀抱

リーリー

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート