转到终结点时收到有关$pushAll的错误,但未在任何地方使用它



我有一个奇怪的...

我已经使用Mongodb 3.4.9开发了一个带有Node/Express/Mongoose的api,现在是3.4.17。

我没有理想的原因,但由于某种原因,我已经使用了很长时间的代码块抛出了一个错误:

{name: "MongoError", message: "Unknown modifier: $pushAll", driver: true, index: 0, code: 9,…}
code: 9
driver: true
errmsg: "Unknown modifier: $pushAll"
index: 0
message: "Unknown modifier: $pushAll"
name: "MongoError"

这是代码:

router.route('/addemail/:id')
// ADD EMAILS
.put(function(req, res){
Profile.findOne({'owner_id':req.params.id}, function(err, profile){
if(err)
res.send(err);
profile.emails.push({
email_type: req.body.email_type,
email_address: req.body.email_address
})
profile.save(function(err){
if(err)
res.send(err);
res.json(profile);
});
});
});

如您所见,我没有在这个代码块中使用$pushAll,实际上也没有在我的代码中的任何位置使用。

还有什么原因可能导致这种情况???

感谢您的任何大师建议。

更新:这是我的个人资料模型,接下来我将包括电子邮件模型:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;  
// SUBDOCUMENTS
var AddressesSchema = require('./profile/addresses');
var BusinessesSchema = require('./profile/businesses');
var EmailsSchema = require('./profile/emails');
var PhonesSchema = require('./profile/phones');
var SocialSchema = require('./profile/social');


// PROFILE (PARENT) MODEL
var ProfileSchema = new Schema({
//PROFILE INFO
owner_id: {
type: String,
require: true,
unique: true
},
notice: {
type: Number, // 1=profile, 2=profile and cards
},
first_name:{
type: String
},
last_name:{
type: String
},
initial:{
type: String
},
birthday:{
type: Date
},
highschool:{
type: String
},
college:{
type: String
},
facebook:{
type: String
},
linkedin:{
type: String
},
linkedin_bus:{
type: String
},
twitter: {
type: String
},
google: {
type: String
},
pinterest: {
type: String
},
user_image: {
type: String
},
contacts:[{
type:Schema.Types.ObjectId,
ref:'Contact'
}],
//SUBDOCUMENTS
emails:[EmailsSchema],
phones:[PhonesSchema],
addresses:[AddressesSchema],
businesses:[BusinessesSchema],
social:[SocialSchema]
});
module.exports = mongoose.model('Profile', ProfileSchema);

以下是电子邮件模型的外观:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;  

// CONTACT (PARENT) MODEL
var EmailSchema = new Schema({
//CONTACT INFO
email: {
type: String,
require: true
},
date_registered: {
type: Date,
default: Date.now
}
});
module.exports = mongoose.model('Email', EmailSchema);

Mongoose 可能会在引擎盖下创建一个$pushAll,但是,正如你在这里看到的,它在较新版本的 MongoDB 中已被删除。所以这就是你得到错误的原因。

我建议您升级到最新版本的猫鼬,这将解决此问题。

另请参阅猫鼬存储库上的这些讨论:https://github.com/Automattic/mongoose/issues/4455 https://github.com/Automattic/mongoose/issues/5574

请原谅我的问,但你为什么不只是:

// ADD EMAILS
.put(function(req, res) {
Profile.update({'owner_id': req.params.id}, 
{
$addToSet: {
email_type: req.body.email_type,
email_address: req.body.email_address
}
});
});

似乎您只想根据owner_id将对象添加到 mongo 文档中的数组中。$addToSet做到了这一点。

你应该利用一些mongodb不错的功能,即你可以做这些:

Profile.findOneAndUpdate({'owner_id':req.params.id},{addToSet:{emails:[ email_type: req.body.email_type, email_address: req.body.email_address]}}, function(err, profile){ 
if(err){
res.send(err);
} else {
res.json(profile);
}
}

相关内容

最新更新