1

私は2つの文書を持っています:

  1. { p1:"a", p2:"b" }
  2. { p1:"a", p2:"b", p3:"c" }

query: { p1:"a", p2:"b" } で最初のドキュメントのみを検索するにはどうすればよいですか? そのため、指定したフィールドを持つドキュメントのみを検索したいと考えています。ドキュメントに (クエリよりも) より多くのフィールドがある場合、検索結果に表示されるべきではありません。

4

2 に答える 2

3

私は、この問題を解決するための通常のクエリ方法を知らないことを認めなければなりません。私が知っている唯一の方法は、MongoDB オブジェクト比較を使用することです。これを行うには、構造を次のようなものに変更します。

{
    ps: [a,b]
}

また:

{
    ps: {p1:a,p2:b}
}

そして、次のようにクエリします。

db.col.find({ p: [a,b] })

また:

db.col.find({ p: {p1:a, p2:b} })

ただし、これには差し迫った問題が 1 つあります。これはキーの順序に依存します。つまり、abが実際に別のドキュメントで逆になっている場合、一致しません。したがって、これを行う場合は、保存するときに順序を気にする必要があります。

それが役に立てば幸い、

于 2012-10-29T08:26:10.777 に答える
2

その構造を扱うのは簡単ではありません。何を取り、何を残すかについて、インデックス可能な他の手がかりが必要です。

不要なフィールドがわかっている場合は、$exists、http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24existsを使用できますが、あまり効率的ではありません。

db.col.find({p3:{$exists:false}})

これを行うこともできます。

db.col.find({ p1:"a", p2:"b", p3:null }

自分のコードで不要なフィールドを捨てていただけませんか? または、ネストされたグループに再構築して、フィルター処理を容易にすることはできますか?

{ basicData:{p1:"a", p2:"b"}, extraData:{p3:"c",p4:"d"} }
于 2012-10-29T10:12:47.870 に答える