2012-05-11 19 views
2

私は特定の単純なケースを扱っています。私はこれのための解決策を見つけることができないように思われるので、いくつかの助けが必要です。[Mongoose] [Node.js]挿入後に文書が見つかりません

私は、JavaScriptのクラス内でMongoDB用の簡単なスキーマとモデルを作成しました。

this.UserSchema = new this.Schema({ 
    UserId: { type: String }, 
    IsToggle: { type: Boolean} 
}); 

this.CalendarViewUserSchema = new this.Schema({ 
    _id: { type: this.Schema.ObjectId }, 
    OwnerId: { type: String }, 
    UserList: [ this.UserSchema ] 
}); 

this.CalendarViewUser = this.mongoose.model('CalendarViewUsers',this.CalendarViewUserSchema); 

これはコンストラクタであると私はすでにデータベースの相互作用の多くは働いていますが、私が働いて、このいずれかを取得するために管理することはできません。

私は、新しいドキュメントを追加するために、このメソッドを呼び出します。

AddCalendarViewUser : function(Id, UserToAddId){   
     NewUser = { UserId : UserToAddId, IsToggle : false }; 

     this.CalendarViewUser.update(
     { OwnerId : Id }, 
     { 
         $set: { OwnerId : Id  }, 
      $push: { UserList : NewUser } 
        }, 
     {upsert:true}, 
     function(err){ 
      if(err) {console.log(err);} 
      else {console.log('Success');} 
     } 
    ); 
}, // this comma just introduces the next method. 

これが正常に動作します。ドキュメントが正しくMongo Explorerで作成されているのがわかります.find()を使用してコレクションのすべてを取得すると、ドキュメントが表示されます。

その後、私は挿入ドキュメントを探ししよう:

ここ
FindCalendarViewUser : function(Id){ 
    this.CalendarViewUser.findOne(
       { OwnerID : Id }, 
       function(err,result){ 

      if(err) {console.log(err);} 
      else{console.log(result);} 
     } 
     ); 
} 

、それは結果= nullを返します。

"Id"パラメータは、スキーマの "OwnerId"と同じように、両方のメソッドのStringです。

私は間違っていますか?

"OwnerId"と "Id"の両方が同じです。私はObjectIdに変換しようとしましたが、成功しませんでした。

申し訳ありませんがコードの書式設定します。

EDIT:

基本的に、私は_idフィールド使用してドキュメントを見つけることができます。

{ _id : '4fb0d1702edfda0104fc2b9f'} 

をしかし、私はOwnerIdにフィールドでそれを見つけることができません。

{ OwnerId : '4f55e1a6c2c7287814000001'} 

これらの値実際に格納された値に対応するように、データベースから直接取得されました。

EDIT 2:

私はちょうど私が手で値を挿入するとことを考え出し:

$set: { OwnerId : '4f55e1a6c2c7287814000001' } 

をして、まったく同じ文字列で検索し、それが文書を返します!

this.CalendarViewUser.findOne(
        { OwnerID : '4f55e1a6c2c7287814000001'} 
... 

だから私はそれがドキュメントのOWNERID分野におけるごみのいくつかの種類を挿入していると思います、またはフィールドの型と互換性がないのいくつかの種類がありました。結果を掲載します。

答えて

0

それはFindCalendarViewUser関数のコールバック関数は、自分自身の周りparentesesを必要と...それはちょうどそれらのparentesisを追加することで、動作するようになりました、判明...

FindCalendarViewUser : function(Id){ 
    this.CalendarViewUser.findOne(
     { OwnerID : Id }, 
     (function(err,result){ 

      if(err) {console.log(err);} 
      else{console.log(result);} 
     }) 
    ); 
} 

ここでは動作例を示します。イエスキリストなぜ。私は他の場面でそれを使わずに使ったことを誓っていたかもしれません。

編集:そして今、それは親なしで働いています。ごめんなさい。私はコードの周りに持っているいくつかの小さな問題でなければなりません。私はそれを見つけることができません。

1

typo?

if(err) {console.log(err);} 
    else{console.log(err);} 
} 
+0

私のフィードバックが遅れて申し訳ありませんが、本当にタイプミスです。私がテストしているファイルのconsole.logは正しいです。私はそれをここでtypo writtingしました。 これがなぜ起こっているのでしょうか?あなたはこの種の座をうかがうことを思い出しますか? ありがとうございます。 –

+0

"_id"フィールドを検索パラメータとして使用すると、ドキュメントが見つかります。私が作成したOwnerIdフィールドを使用すると、何も見つかりません。 私は、幸運のないObjectId型のフィールドOwnerIdを使用しようとしました。 –

+0

また、手動で検索クエリを挿入しようとしました: {OwnerID: '4f55e1a6c2c7287814000001'}(これはMongo Explorerで見ることができるようにそのフィールドにあるIDです) –

関連する問題