Đây là mã thử nghiệm của tôi mà tôi không thể tìm ra lý do tại sao nó không hoạt động, vì nó rất giống với kiểm tra 'populating multiple children of a sub-array at a time'.Mongoose populate
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;
mongoose.connect('mongodb://localhost/testy');
var UserSchema = new Schema({
name: String
});
var MovieSchema = new Schema({
title: String,
tags: [OwnedTagSchema]
});
var TagSchema = new Schema({
name: String
});
var OwnedTagSchema = new Schema({
_name: {type: Schema.ObjectId, ref: 'Tag'},
_owner: {type: Schema.ObjectId, ref: 'User'}
});
var Tag = mongoose.model('Tag', TagSchema),
User = mongoose.model('User', UserSchema),
Movie = mongoose.model('Movie', MovieSchema);
OwnedTag = mongoose.model('OwnedTag', OwnedTagSchema);
User.create({name: 'Johnny'}, function(err, johnny) {
Tag.create({name: 'drama'}, function(err, drama) {
Movie.create({'title': 'Dracula', tags:[{_name: drama._id, _owner: johnny._id}]}, function(movie) {
// runs fine without 'populate'
Movie.find({}).populate('tags._owner').run(function(err, movies) {
console.log(movies);
});
});
})
});
lỗi được sản xuất là
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
TypeError: Cannot call method 'path' of undefined
at /Users/tema/nok/node_modules/mongoose/lib/model.js:234:44
Cập nhật
Chấn thoát khỏi từ OwnedTag và viết lại MovieSchema như mã
var MovieSchema = new Schema({
title: String,
tags: [new Schema({
_name: {type: Schema.ObjectId, ref: 'Tag'},
_owner: {type: Schema.ObjectId, ref: 'User'}
})]
});
Làm việc này https://gist.github.com/1541219
Không, cùng một kết quả :-( – spacevillain
Ah. Thực ra, hãy quay trở lại kiểu gốc của bạn. Bạn đang sử dụng '.populate' nhưng bạn đang sử dụng một subdocument cho' tags', chứ không phải ref. hy vọng nó hoạt động - chúng ta đang tiến xa hơn nữa từ sức mạnh của một cơ sở dữ liệu NoSQL - nhưng, có lẽ điều này sẽ làm việc - xem thêm nỗ lực thứ 2 ở trên. – danmactough
Điều này phá vỡ mọi thứ :-(Tôi không hiểu sự khác biệt giữa https://github.com/LearnBoost/mongoose/blob/master/test/model.ref.test.js#L1109 Có lẽ bạn có thể giúp tôi xem nó? – spacevillain