2016-08-29 14 views
2

なぜこれらの構文の1つが機能し、もう1つがそうでないのか分かりません。彼らはどちらも同じことを意味すると私は理解しています。Mongoクエリ構文エラー

これは、これは以下のように

{ profile : { fname : { $regex: ".*" + this.queryParams.value + ".*", $options: '-i'}}}, 

例のデータ構造が見える動作しません

{ 'profile.fname' : { $regex: ".*" + this.queryParams.value + ".*", $options: '-i'}}, 

に動作します:最初のものは、正しい結果が得られます

{ 
"_id":"ybhng3YCu4W4MSzz9", 
"createdAt":"2016-08-23T10:44:33.088Z", 
"emails":[{"address":"[email protected]","verified":false}], 
"profile": 
{ 
"fname":"name", 
"lname":"otherName" 
}, 
"roles":["admin"] 
} 

が、 2番目のものは空の配列のように何も生成しません。デバッグから、私はこれが間違った構文でなければならないことを知っていますが、私はそれを見ることができません。

私はサーバー側として流星を使用しています。

+0

構造的に、それは、プロファイルのサブ構造である二番目でfnameのように見えます。 – sln

+0

@sln例データセット – Allreadyhome

答えて

0

埋め込みドキュメントに対してクエリを実行する場合は、最初のクエリで行っているようにドット表記法を使用する必要があります。

ドキュメントを提供する場合は、完全一致でなければなりません。この場合、文字通り次のものが必要になります。

{ profile: { fname: "name", lname :"otherName"} } 

もちろん、これは私にとっては悪いデザインのようです。最初にプロファイルが埋め込まれたドキュメントとなるのはなぜですか?代わりに、このような何かを:

{ 
"_id":"ybhng3YCu4W4MSzz9", 
"createdAt":"2016-08-23T10:44:33.088Z", 
"emails":[{"address":"[email protected]","verified":false}], 

"fname":"name", 
"lname":"otherName" 

"roles":["admin"] 
} 

参考:最初に、それはプロファイルのメンバーだがQuery on Embedded Documents

+0

ありがとうございました。プロファイルは、コア流星口座スキーマの拡張です。 – Allreadyhome