gpt4 book ai didi

node.js - 为什么我的引用文献不填充文档?

转载 作者:太空宇宙 更新时间:2023-11-03 22:32:16 25 4
gpt4 key购买 nike

我在 Node.js 应用程序中使用 Mongoose 4.3.6

例如,我有两个模型:

var User = mongoose.model('User', SomeParentSchema.extend({
_id: String,
name: String
}));

var Like = mongoose.model('Like', AnotherParentSchema.extend({
_id: String,
user_id: {
type: String,
ref: 'User'
}
}));

我也在使用mongoose-schema-extend ,为了这个问题,我们可以说这两个实体都是从某个父模式扩展而来的。

由于我使用的是 ref,理论上 Model.populate应使用 User 模型自动填充该字段。

The ref option is what tells Mongoose which model to use during population

Like.findOne({}).populate('user_id').exec(callback);

上面的方法根本行不通。就这么简单(该字段最终为 null)。我必须这样做才能使其正常工作:

Like.findOne({}).populate({ path: 'user_id', model: 'User' }).exec(callback);

当我这样做时,该字段是预期的 User 对象(但由于某种原因,我必须明确告诉 populate 将该路径作为 查找) User 模型;尽管根据我上面链接到的 Mongoose 文档,应该使用 ref 来处理该问题)。

我错过了什么吗?

最佳答案

我只是使用以下命令测试您的示例代码,此查询 Like.findOne({}).populate('user_id').exec(callback); 似乎运行良好。

架构:

var PersonSchema = new mongoose.Schema({
t: String
}, {collection: 'persons'});

var User = mongoose.model('User', PersonSchema.extend({
_id: String,
name: String
}));

var ParentSchema = new mongoose.Schema({
s: String
}, {collection: 'parent'});

var Like = mongoose.model('Like', ParentSchema.extend({
_id: String,
user_id: {
type: String,
ref: 'User'
}
}));

将数据插入数据库,

var user = new User({
t: 't1',
_id: '1234567',
name: 'test'
});

var like = new Like({
s: 's1',
_id: '23456789',
});

user.save(function(err, u){
if(err)
console.log(err);
else {
like.user_id = u._id;
console.log(like);
like.save(function(err) {
if (err)
console.log(err);
else
console.log('save like and user....');
});
}
});

查询

Like.findOne({}).populate('user_id').exec(function(err, doc) {
if (err)
console.log(err);
else
console.log(doc);
});

结果是

{ _id: '23456789',
__t: 'Like',
user_id: { _id: '1234567', __t: 'User', t: 't1', name: 'test', __v: 0 },
s: 's1',
__v: 0 }

关于node.js - 为什么我的引用文献不填充文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34984199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com