Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用mongoose在MongoDB中创建记录时填充数组_Javascript_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript 使用mongoose在MongoDB中创建记录时填充数组

Javascript 使用mongoose在MongoDB中创建记录时填充数组,javascript,mongodb,express,mongoose,Javascript,Mongodb,Express,Mongoose,我正在写一个应用程序来跟踪成员及其证书。每个成员都有一些引用其他模型的数组,如中所述 成员架构 认证模式 电子邮件和服务信用的模式相似,它们都有\u成员字段 当我创建电子邮件时,它被添加到电子邮件模型中,我可以随后执行 var Email = mongoose.model('Email'); Email.findOne().populate('_member').exec(function (err, email) { console.log(email._member.name.first

我正在写一个应用程序来跟踪成员及其证书。每个成员都有一些引用其他模型的数组,如中所述

成员
架构
认证
模式
电子邮件
服务信用
的模式相似,它们都有
\u成员
字段

当我创建
电子邮件
时,它被添加到
电子邮件
模型中,我可以随后执行

var Email = mongoose.model('Email');
Email.findOne().populate('_member').exec(function (err, email) {
  console.log(email._member.name.first);
});
但是,它不会添加到
成员
模式中的数组中,因为当我运行

var Member = mongoose.model('Member');
Member.findOne().populate('emails').exec(function (err, member) {
  res.json(200, member);
});
我收到JSON中的
电子邮件:[]
,而显然有一封
电子邮件与该成员关联

我在Mongoose API上读到,文档本身需要填充,因此我尝试使用以下内容来执行在中引用的操作:

var Member = mongoose.model('Member');
Member.findOne({ _id: req.session.member._id }, function (err, member) {
  member.populate('emails', function (err) {
    console.log('populated emails');
  });
});

但是我得到了一个错误:
(成员的JSON数据)没有方法“填充”
。我知道我试图在错误的东西上运行
populate
,但我不知道正确的方法是什么。

我也遇到了填充数组的问题,您定义的模式将为每个数组元素创建一个子文档(尝试转储数组)

尝试将架构更改为:

电子邮件:[类型:mongoose.Schema.Types.ObjectId]

和使用

Member.findOne().populate({ path: 'emails', model: 'Email' }).exec(function (err, member) {
    res.json(200, member);
});

要填充数组。

您必须手动将新
电子邮件的
ObjectId
添加到相应
成员的
电子邮件
数组中;你在这么做吗?
var Member = mongoose.model('Member');
Member.findOne({ _id: req.session.member._id }, function (err, member) {
  member.populate('emails', function (err) {
    console.log('populated emails');
  });
});
Member.findOne().populate({ path: 'emails', model: 'Email' }).exec(function (err, member) {
    res.json(200, member);
});