不幸的是,猫鼬的子文档不起作用,我也不知道为什么:
...
mongoose.connect('mongodb://zzz@xxx.ccc.com:59676/zxcv');
var Schema = mongoose.Schema;
var entrySchema = Schema({
title: String,
img: String,
info: String,
link: String
}, {collection: 'xxx'});
var userDataSchema = Schema({
name: String,
password: { type: String, select: false},
birth: Number,
followers: [{ "name": String}],
entry: [entrySchema]
}, {collection: 'yyy'});
var UserData = mongoose.model('UserData', userDataSchema);
var entry = mongoose.model('entry', entrySchema);
app.get('/:user', function(req, res) {
UserData.findOne( {'name': req.params.user}, function(err, user) {
if (err)
res.send(err);
res.json(user);
});
});此代码返回来自userDataSchema方案和空条目的数据:[]。我可以分别查询userDataSchema和entrySchema并返回正确的数据,但是它不能一起工作。我在哪里犯错误?默认情况下,我希望动态地向我的模式中添加所有集合(名称在追随者中)。
发布于 2018-01-23 12:31:24
您需要重新定义模式,以便将人口()使用为:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var entrySchema = Schema({
title: String,
img: String,
info: String,
link: String
}, {collection: 'xxx'});
var userDataSchema = Schema({
name: String,
password: { type: String, select: false },
birth: Number,
followers: [{ "name": String}],
entry: [{ type: Schema.Types.ObjectId, ref: 'entry' }]
}, {collection: 'yyy'});
var UserData = mongoose.model('UserData', userDataSchema);
var entry = mongoose.model('entry', entrySchema);
app.get('/:user', function(req, res) {
UserData.findOne({'name': req.params.user})
.populate('entry')
.exec(function(err, user) {
if (err)
res.send(err);
res.json(user);
});
});考虑到您实际上已经将对entry模型的引用保存为userData集合中的_id,这是可行的。
有关上述工作原理的深入说明,请咨询文档.
发布于 2018-01-23 12:18:57
var entrySchema = new Schema({
^^^
title: String,
img: String,
info: String,
link: String
});编辑:当您用{collection: 'xxx'}声明entrySchema时,您强迫猫鼬创建一个名为xxx的分隔集合,这就是为什么您应该引用userDataSchema中的entrySchema,如chridam的答案所述,或者删除集合选项:{collection: 'xxx'}
https://stackoverflow.com/questions/48401337
复制相似问题