2017-09-27 8 views
0

クエリでuser.info.name.familyNameにアクセスする際に問題があります。私はデータベース設計とクエリを新しくしており、可能かどうかわかりません。mongoDBがネストされたドキュメント内のネストされたドキュメントを照会しています

ここに私が持っているスキーマがあります。おそらく、私が働こうとしていることのために再設計する必要があるかもしれません。

var UserSchema = mongoose.Schema({ 
    username: { 
     type: String, 
     index: true, 
     required: true, 
     unique: true 
    }, 
    password: { 
     type: String, 
     required: true 
    }, 
    email: { 
     type: String, 
     required: true, 
     lowercase: true 
    }, 
    emailVerified: { 
     type: Boolean, 
     default: false 
    }, 
    info: { 
     name: { 
      givenName: String, 
      familyName: String, 
     }, 
     address: { 
      street: String, 
      city: String, 
      state: String, 
      zipCode: String 
     }, 
     primaryPhone: String, 
     cellPhone: String, 
     website: String, 
     licenseNumber: String, 
     title: String, 
     company: String 
    }, 
    avatar: { 
     type: String, 
     default: '/images/avatar/default/contacts-128.png' 
    }, 
    friends: [{ type: ObjectId, ref: User }], 
    friendRequests: [{ type: ObjectId, ref: User }] 
}); 

私は現在、ユーザー名または電子メールで検索し、正常に動作します検索機能を持っていますが、私はそれはまた、ユーザーgivenName属性やFamilyNameでで検索したいと思います。ここでは検索機能は、私はいくつかの他の無意味な事をしようとしたが、彼らはまた、失敗した...

私はこれを試してみました...そして、それは

{info.name.givenName: searchValue} 

を動作しませんでした...

module.exports.search = function(searchValue, callback) { 
    var searchValue = new RegExp(`^${searchValue}`, 'i'); 
    var query = { 
     $or: [ 
      {username: searchValue}, 
      {email: searchValue} 
     // {givenName condition here...} 
     ] 
    } 

    User.find(query, callback).limit(10); 
} 

です

私の質問を要約すると、user.info.name.givenNameに対してsearchValueをチェックできるようにするには、どのようにスキーマやクエリを再構成するのですか?

答えて

0

この方法:

{'info.name.givenName': searchValue} 

予告引用符。

閉じる:

関連する問題