我遇到了一些问题,尝试通过父文档保存子文档,然后按照官方文档进行操作。
var UserSchema = new mongoose.Schema({
name: String,
Animals : [{ type: mongoose.Schema.Types.ObjectId, ref: 'Animal' }],
});
var AnimalSchema = new mongoose.Schema({
name: String
});
我曾经这样工作:
function(User, callback) {
var Animal = new AnimalSchema({ name: 'bob' });
Animal.save(function() {
User.Animals.push(Animal._id);
User.save(callback);
});
}
一切都很顺利,但我在docs中看到了我们可以写的:
function(User, callback) {
var Animal = new AnimalSchema({ name: 'bob' });
User.Animals.push(Animal);
User.save(callback);
}
但它不能100%为我工作:
我的子文档嵌套在我的文档中,但我不能find()
它,它是父文件的常规密钥。
另外,当我有另一个嵌套集团时,如:
var UserSchema = mongoose.Schema({
name: String,
Animals : {
dogs: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Animal' }],
cats: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Animal' }]
}
});
我做:
function(User, callback) {
var Animal = new AnimalSchema({ name: 'bob' });
User.Animals.dogs.push(Animal);
User.save(callback);
}
我的ObjectId
数组中只有一个User.dogs
作为项目(由于上述原因,我无法填充)。
我错过了什么吗?我正在使用mongoose 3.8,他们说in the doc doc我们应该能够以这种方式查询tu子文档。
It is debatable that we really want two sets of pointers as they may get out of sync. Instead we could skip populating and directly find() the stories we are interested in.