2017-08-08 11 views
0

モンゴースの人口問題については、現在非常に混乱しています。モンゴースのネストされた人口が機能しない

私のデータ構造は次のとおりです。ユーザーはクライアントの配列を持ち、クライアントにはローンの配列があります。私はUser.findを使用しており、クライアントには問題はありません。しかし、クライアントの内部にあるローンをどのように埋めるのですか?私はこれを試しました:

基本的に目標は、クライアントの配列を渡すことです、各クライアントにはローンが含まれます。しかし今のところ、ローンオブジェクトを空にしたい。クライアントは正しく配置されていますが、Loan参照は未定義として渡されています。

app.get("/loans", IsLoggedIn, function(req, res) { 
    User.findById(req.user._id).populate({path: "clients", populate: { path: "loans", model: "loan"}}).exec(function(err, user){ 
    if(err){ 
     console.log(err); 
    } else{ 
     var amountRepaid = calcRepaid(user.clients.loans); 
     console.log(user.clients.loans); 
     res.render("index", {clients: user.clients, amountRepaid: amountRepaid}); 
    } 
    }); 

しかし、動作していないようですが、私のモデルは以下のとおりです。

モデル:

クライアント:

var mongoose = require("mongoose"); 
var clientSchema = mongoose.Schema({ 
    loans: [{ 
    type: mongoose.Schema.Types.ObjectId, 
    ref: "loan" 
    }], 
    emailAdderess: String, 
    firstname: String, 
    lastname: String, 
    contactNumber: String , 
    dateCreated: {type: Date, default: Date.now}, 
    gender: String, 
}) 

module.exports = mongoose.model("Client", clientSchema); 

ユーザー:

const mongoose = require("mongoose"); 
const passportLocalMongoose = require("passport-local-mongoose"); 
var UserSchema = mongoose.Schema({ 
    username: String, 
    password: String, 
    firstname: String, 
    lastname: String, 
    clients: [{ 
    type: mongoose.Schema.Types.ObjectId, 
    ref: "Client" 
    }] 
}); 
UserSchema.plugin(passportLocalMongoose); 

module.exports = mongoose.model("User", UserSchema); 

ローン:

var mongoose = require("mongoose"); 

var LoanSchema = mongoose.Schema({ 
    firstName: String, 
    lastName: String, 
    email: String, 
    contactNumber: Number, 
    amountBorrowed: Number, 
    length: String, 
    address: String, 
    dateDue: Date, 
    gender: String, 
    date: { type: Date, default: Date.now }, 
    amountRepaid: { type: Number, default: 0}, 
    loanRepaid: {type: Boolean, default: false} 

}) 

module.exports = mongoose.model("loan", LoanSchema); 
+1

ここで質問するときは、コードの外部リンクや画像を使用せず、質問に関連コードを含めてください。また、この例を再現性のあるものにすることができます。この場合、期待される結果を生成する関連データの「サブセット」を含めることを意味します。 [最小限の完全かつ検証可能なサンプルを作成する方法](https://stackoverflow.com/help/mcve)を参照してください。あなたの考えられる原因は、モデル間で実際には一致しない参照があることです。これはあなたが見なければならないものです。解決できない場合は、少なくとも1つの結果を返すのに十分なデータを提供してください。 –

+0

あなたが使用しているマングースバージョンは何ですか? – ryder

+0

@NeilLunn申し訳ありません、私は何時間もそれを修正しようとした後に寝る直前に、私の悪い。私がデータのサブセットを含んでいなかったのは、私がデータを使用していないからです。私は最初に空の配列を渡したいと思います。ユーザーは後でそれを追加します。それを質問に追加します。私はあなたが参照がモデル間で一致しないと言うときにあなたが意味するものを理解していないのですか?おそらく少し拡大できますか?ありがとう。 – Cathal

答えて

0

これを試してみてください:

.populate({ 
    path: 'clients', 
    populate: { 
     path: 'clients.loans' 
    } 
}) 
+0

これは、クライアントに人口が設定されていないため、ローンにデータが入力されていないために動作するようです。 – Cathal

+0

私はこの方法でやりました。 ..入れ子になった母集団のモデル部分を削除してみますか?私はそれが必要だとは思わない。 –

+0

私は本当にpopulateメソッドのために約8つの異なる構文を試しましたが、うまくいかないようで、私はなぜそれがわかりません。うん、私はモデルを削除しようとしたが、どちらもうまくいかず、2つ目のpopulateを "clients.loans"とし、ちょうど "Loans"として試してみたところ、どちらもうまくいきませんでした。 – Cathal

関連する問題