我正在尝试upsert
一个Mongo集合的数据集。
当我运行以下代码时,出现错误:MongoError: The dollar ($) prefixed field '$push' in '$push' is not valid for storage.
我根据文档https://docs.mongodb.org/getting-started/node/update/#update-multiple-documents
将它放在一起版本: MongoDB(windows)= 3.2.0; mongodb(npm包)= 2.1.4
var query = {
county: aCountyName,
state: aStateName
}
var params = {
'$set': {
county: 'Boone',
state: 'MO',
'$push': {
zips: {
'$each': [ '65203' ]
}
}
}
}
(could also be)
var params = {
'$set': {
county: 'Pierce',
state: 'WA',
'$push': {
zips: {
'$each': [ '98499', '98499' ]
}
}
}
}
db.collection(collectionName).updateMany(query, params, {'upsert': true},
function(err, results) {
callback();
}
);
答案 0 :(得分:18)
我认为$push
在$set
内无效。而是尝试将其添加为另一个参数,例如:
var params = {
'$set': {
county: 'Pierce',
state: 'WA'
},
'$push': {
zips: {
'$each': ['98499',
'98499']
}
}
}
答案 1 :(得分:2)
原因是你没有关闭}
所以MongoDB认为$push
是一个字段的名称,如documentation中提到的那样:
字段名称不能包含点(即。)或空字符,并且它们不能以美元符号(即$)开头。
var query = {
county: aCountyName,
state: aStateName
};
var params = {};
params['$set'] = { county: 'Boone', state: 'MO' };
params['$push'] = { zips: { '$each': [ '65203' ] } };
然后:
db.collection(collectionName).updateMany(query, params, {'upsert': true},
function(err, results) {
callback();
}
);