2011-09-02 6 views
8

Mongodb - サブ文書のキーの正規表現の一致

mongo CLIを使用すると、/^url_/に一致するpayloadのサブ文書を探すことは可能ですか?それが可能であれば、マッチのサブ文書を照会することも可能でしょうか(たとえば、textが存在することを確認してください)?

私は次のような考えをしていました。

db.urls.find({"payload":{"$regex":/^url_/}}).count(); 

しかし、結果は0です。

どんな助けや提案も素晴らしいでしょう。

ありがとう、

Matt

答えて

5

それは、このように文書キーに対してクエリを実行することはできません。 $existsを使用して完全一致を検索できますが、パターンに一致するキー名は見つかりません。

URLサブ文書を持つ文書を見つけようとしていると仮定していますが、すべての文書にこのような文書があるとは限りません。レベルダウンし、その型情報をプッシュしないのはなぜ、のようなもの:

{ 
    payload: { 
    type: "url", 
    url: "Facebook.com", 
    ... 
    } 
} 

は、その後、あなたは次のように問い合わせることができます:私はあなたがドットを使用してはならないことに注意していなかった場合

db.foo.find({"payload.type": "url", ...}) 

また、私は怠慢だろう(.)はMongoDBのキー名です。場合によっては、このようなドキュメントを作成する可能性がありますが、組み込みドキュメント(Mongoがドットを "パス区切り"として使用して話す)にクエリを実行しようとすると、大きな混乱が生じます。

+0

お返事ありがとうございます。残念ながら、私はコレクションに挿入されているドキュメントのデザインを制御できません:/ また、埋め込みドキュメントとはどういう意味ですか?リンクがありますか?それはサブオブジェクトと同じですか? –

+1

「サブオブジェクト」と同じ意味です。 「組み込み文書」はデータ中心の用語であり、「サブオブジェクト」はプログラミング中心の用語です(Mongo文書がオブジェクトの階層として表現されている言語の場合)。コレクション内のドキュメントの構造を変更できない場合は、map-reduceを使用して、よりクエリ可能な形式(ここで提案したものなど)に書き直すことを検討してください。 – dcrosta

+0

クール、助けてくれてありがとう! –