web-dev-qa-db-ja.com

MongoDB $ elemMatch $ in

だから、私はその中にドキュメントの配列のロードを持つデータベースを持っています。 $inを使用して、クエリが1つ以上の配列要素に完全に一致するドキュメント全体を検索したい。

したがって、ドキュメント構造:

{
  "_id": "76561198045636214",
  "timecreated": 1311148549,
  "unusual": [
    {
      "id": 1960169991,
      "original_id": 698672623,
      "defindex": 313,
      "_particleEffect": 19
    },
    {
      "id": 965349033,
      "original_id": 931933064,
      "defindex": 363,
      "_particleEffect": 6
    }
  ]
}

私はこのような多くのドキュメントを持っています。1つの配列エントリにdefindex 313と_particleEffect 19の両方を含む配列があるドキュメントを探したいので、$elemMatchを使用する必要があります。

また、多くの異なる配列の組み合わせを一度に検索できるようにしたいので、たとえば、defindexが363で、_particleEffectが19または6の配列は、$inを使用する必要があることを意味します。

ただし、$ elemMatchと$inをクエリに入れようとすると、elemMatchは配列で機能しないため、それとは関係ありません。できません。

これまでの私の試み:

{unusual:{$all:[{"defindex":{"$in":[361,378]}},{"_particleEffect":{"$in":[30,0]}}]}}

(私の最新の試み、単に機能しません。)

{"$and":[{"unusual.defindex":{"$in":[361,378]}},{"unusual._particleEffect":{"$in":[[30,36]]}}]}

そして、私が$elemmatch$andの組み合わせをロードしてみたところ、さらに多くのことがありました。

(珍しい配列で項目を見つけますが、配列の区切りを無視しますIEこれは、条件を満たすために複数の項目が使用されるドキュメントを返します(したがって、一致するdefindexを持つ少なくとも1つの項目と1つの項目それは効果があります。)

私はこれに1日半を費やして、私のものとほとんど同じである質問を見つけても本当に遠くまで来ましたが、$in部分の言及がありませんでした。 -> MongoDB:複数の配列要素に一致

tl; dr:$in + $elemMatchを効果的に実行する方法はありますか?

やや不適切な形式の投稿を読んでいただき、ありがとうございます。

17
Digits

同じ結果を達成しようとしているものとは異なる構文を使用できますが、SERVER-3544の制限に遭遇しません。

次の構文を使用します。

db.collection.find({ "unusual": {"$elemMatch":{"defindex":363,"_particleEffect":{"$in":[6,19]}  }} })

これは、313と6または19の両方の配列要素を持つすべてのドキュメントに一致します。

また、{$in:[]} defindexと_particleEffectの両方で、2つのリストの任意の組み合わせを照合する場合。

db.collection.find({ "unusual": {"$elemMatch":{"defindex":{"$in":[313,363]},"_particleEffect":{"$in":[6,19]}  }} })
28
Asya Kamsky

https://jira.mongodb.org/browse/SERVER-3544

ウェールプ、たくさんの掘り起こしをして、それが私の質問に答えるようです。現在、$ in $ elemmatchを行うことはできません。

1
Digits