javascript - Mongodb:无法使用字符串字段名称附加到数组

标签 javascript node.js mongodb mongoose database-schema

我正在尝试使用 $push 插入子数组,但遇到了 Mongo 错误,并且在 google 上进行了大量搜索后无法解决此问题,并且 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
}

Controller :

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);
    }
});
};

最佳答案

@cbass 在他的回答中所说的一切都是正确的,但由于您的 NetworkRequest 元素中没有要定位的唯一标识符,因此您需要按位置执行此操作:

var query = {'UserID': req.body.UserID};
var update = {$push:{'NetworkRequest.0.to': req.body.FriendID}};
Test.update(query, update, {upsert: true}, function(err, result) { ... });

'NetworkRequest.0.to' 标识 NetworkRequest 数组第一个元素的 to 字段。

关于javascript - Mongodb:无法使用字符串字段名称附加到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27566647/

相关文章:

mongodb - 无法将数据从kafka主题发送到elasticsearch

javascript - 在 React hooks 中我们还需要功能性的 setState 方式吗?

JavaScript 失礼 - 让我把全局库放在窗口上?

javascript - 使用 Javascript 从数组返回多个索引值

javascript - 我传入的信息到哪里去了?

mongodb - 为了使事情正确,您必须安装 php_mongo 模块

javascript - 点击 Ext JS 打开/保存对话框

javascript - Elasticsearch Javascript客户端更新不起作用

node.js - 运行 setTimeout 并在终端中显示登录信息

laravel - "Class ' MongoDB\驱动程序\管理器 ' not found"