検索

ホームページ  >  に質問  >  本文

mongodb - mongo の複雑なクエリの問題

オリジナルの json

リーリー

クエリしたい結果:

リーリー

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

我想大声告诉你我想大声告诉你2789日前784

全員に返信(4)返信します

  • 怪我咯

    怪我咯2017-05-02 09:27:22

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

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


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

    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
  • 为情所困

    为情所困2017-05-02 09:27:22

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

    リーリー

    返事
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-02 09:27:22

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

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

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

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

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

    リーリー

    ご参考までに。

    MongoDB を愛してください!

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

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

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

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

    返事
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-02 09:27:22

    リーリー

    返事
    0
  • キャンセル返事