2011-02-08 11 views
1

ネストされたドキュメントを扱うときにドット表記を使用できますか?ノードJSのドット表記MongoDbクエリ

http://www.mongodb.org/display/DOCS/Dot+Notation+(Reaching+into+Objects

私は減らすため、このようなクエリを実行 に必要/マップの結果を照会しようとしています:ノードのコードでこれをしようと

find({'_id.page' : 'ThisPage', '_id.user' : 'AUser'}) 

は、行を戻さなかったが、同じクエリがmongodbシェルで期待される として機能します。

+0

これをプロファイリングし、実際にノードからサーバーに送信されますどのようなクエリを参照することができますか? –

+0

はい。 mongodbドライバの問題だと思われます。キーから引用符を削除すると、クエリは({_ id.page:'ThisPage '、_id.user:' AUser '}) – Khash

答えて

0

これまでにやったことは非常に可能です。

なぜあなたの_idプロパティの下にネストされたドキュメントがありますか?あなたのユースケースが何であるか分かりませんが、それはちょっと変わったようです。 _idは、常にドキュメントの一意のIDである特別なプロパティです。したがって、ドライバによって特別扱いになる可能性があります(つまり、サブ文書があるとは思われません)。おそらく、別のプロパティ名の下にあなたのサブ文書を入れてみてください。

+0

の結果になります。 mapreduceはマルチパートIDを持つことができます。さらに、それが_idかfooと呼ばれるのはなぜ重要なのでしょうか?質問は、1つ以上のレベルの深いところに埋もれている不動産にアクセスする際の問題に関するものです。これまでに "どのように"やっているのか詳しく説明できますか? – Khash

+0

私は単にドキュメントをたどり、引用符で囲んだドット表記を使用しました。たとえば、 'foo.bar'が動作するはずです。私はNodeJSでこれをやったことはありませんが、他の言語で行っています。そして、はい、私はあなたが正しいと思います。MongoDB自体には、マルチパート_idプロパティを発行することに制限はありません。私が元々答えていたことは、言語ドライバが時々スマートになり、魔法のようなものを適用しようとしていることです。たとえば、C#の世界では、ドキュメントの_idプロパティがObjectIdであり、マルチパートドキュメントではないと常に仮定しています。だから、私の提案は単に_idの名前を別の名前に変更しようとすることでした。 – sym3tri

2

照会のために文書の内部に到達するためにドット表記は不要ですが、代わりに文書表記を使用できます。

find({'_id.page' : 'ThisPage', '_id.user' : 'AUser'})

ではなく、可能性があり

find({_id: {page: 'ThisPage', user: 'AUser'}})

関連する問題