【发布时间】:2015-02-18 10:11:48
【问题描述】:
我正在尝试使用 $push 推入子数组,但出现 Mongo 错误,在谷歌上进行大量搜索后无法通过此操作,并且 findOneAndUpdate 没有成功,所以我分别使用了 find 和 update
{ [MongoError: can't append to array using string field name: to]
name: 'MongoError',
err: 'can\'t append to array using string field name: to',
code: 13048,
n: 0,
lastOp: { _bsontype: 'Timestamp', low_: 2, high_: 1418993115 },
架构:
var NetworkSchema = new Schema({
UserID: {
type: Schema.Types.ObjectId,
ref: 'User'
},
NetworkList: [{
type: Schema.Types.ObjectId,
ref: 'User'
}],
NetworkRequest: [{
from: [{
type:Schema.Types.ObjectId,
ref: 'User'
}],
to: [{
type: Schema.Types.ObjectId,
ref: 'User'
}]
}]
});
文档:
{
"UserID" : ObjectId("549416c9cbe0e42c1adb42b5"),
"_id" : ObjectId("549416c9cbe0e42c1adb42b6"),
"NetworkRequest" : [
{
"from" : [],
"to" : []
}
],
"NetworkList" : [],
"__v" : 0
}
控制器:
exports.update = function(req,res) {
var network = req.network;
var query={'UserID':req.body.UserID};
var update = {$push:{'NetworkRequest.to': req.body.FriendID}};
Network.find(query,function(err){
if (err) {
console.log(err);
return err;
} else {
}
});
Network.update(query,update,{upsert:true},function(err,user){
console.log(user);
if (err) {
console.log(err);
return err;
} else {
console.log('User'+user);
}
});
};
【问题讨论】:
-
不确定这是否是唯一的问题,但
NetworkRequest在您的架构中被定义为一个对象,但在您的文档中它是一个数组。另外,为什么Network.find会在那里打电话? -
抱歉,NetworkRequest 是 Schema 中的一个数组,我现在编辑了问题,猫鼬 findOneAndUpdate 在我使用此功能时不起作用,没有显示错误,但我无法将值附加到我的数据库中的数组,所以我分别使用了 Network.find 和 Network.update,它工作得很好,直到 MongoDb 的这个错误显示为控制台,请帮助我,我希望你理解我的情况,如果没有,那么我会给你详细解释一下
-
不需要
Network.find调用。只需将其删除。 -
好的!我做了,但仍然得到那个 mongo 错误!
标签: javascript node.js mongodb mongoose database-schema