2016-08-22 7 views
0

を配列を取得は、私は多少このようにユーザーのモデル構造を持つサブ文書のMongoDBに

const doSchema = new mongoose.Schema({ 
    name: {type: String, default : ''}, 
    user: {type: mongoose.Schema.ObjectId, ref: 'User'}, 
    createdAt: {type : Date, default : Date.now} 
}); 

そして、私はどのように署名されたユーザーのtodosDo配列を取得するのか把握しようとしています。これは私がこれまで持っているものです:

// Get all "Do" todos from DB 
// Experimenting to find todos from certain user 
    User.findById(req.user.id, function(err, user){ 
    if(err){ 
     console.log(err); 
    } else { 
     doTodos = user.todosDo, // this obviously doesn't work, just an idea of what I was going for 
     console.log(doTodos); 
     finished(); 
    } 
    }); 

アムは、私が間違っている子/親を参照するか、私は右の配列を取得していないのですか?どんな助けでも大歓迎です!

+0

あなたのコードに実際に 'users.todosDo'の後にカンマがありますか?そうであれば、意図せず 'doTodos'を' undefined'である 'console.log()'に設定します。 – Mike

+0

@Mikeですが、私はdoTodosを次のように定義しました: 'var doTodos = {};'すべての "Do" todosをDBから取得する前に。それともあなたが言っていることではないのですか? –

答えて

0

おかげuser.jsファイルにdoSchema.jsファイル

const doSchema = new mongoose.Schema({ 
    name: {type: String, default : ''}, 
    user: {type: mongoose.Schema.ObjectId, ref: 'User'}, 
    createdAt: {type : Date, default : Date.now} 
}); 
module.exports = mongoose.model('DoSchema', doSchema); 

に言います!私の問題は、ポストルートの新しく作成したすべてのtodosをtodosDoにプッシュする必要があったため、getルートでそれらを取得できることでした。すべてが今働いている!

0

これまでのところ、生のjsオブジェクトとして編集して、lean()機能を使用する必要があるかもしれません。 lean()関数ユーザーはmongooseオブジェクトですので、変更することはできません。

User.findById(req.user.id) 
    .lean() 
    .exec(function (err, user) { 
    if(err){ 
     console.log(err); 
     return res.status(400).send({msg:'Error occurred'}); 
    } 
    if(!user) { 
     return res.status(400).send({msg:'User Not found'}); 
    } 

    doTodos = user.todosDo; 
    console.log(user.todosDo); // check original todos 
    console.log(doTodos); 
    return res.status(200).send({doTodos : doTodos }); // return doTodos 

    }); 

を、あなたはそのschemaプロパティを経由してモデルのスキーマにアクセスすることができます別のモデルから親スキーマ子スキーマを参照するために:

はこの1試すことができます。

var DoModel = require('./doSchema');// exact path 
const userSchema = new mongoose.Schema({ 
    email: { type: String, unique: true }, 
    password: String, 

    todosDo: [DoModel.schema], 
} 
あなたの助けみんなのため
+0

@shishabお返事ありがとうございますが、実行しようとすると読み込みが行われて何も表示されません。しかし、私はまだそれが空の配列であるdoTodosを出力するので、アプリケーションがconsole.logに到達したことを知っています。 –

+0

は何も返されなかったので読み込みを続けます。更新された回答。 'user'コレクションの' todosDo'にデータがあることを確認してください。 –

関連する問題