MongoError:$ push中的美元($)前缀字段'$ push'对于存储无效
我正在尝试将数据集upsert
到Mongo集合中。
- 目标文件可能存在也可能不存在。
- 如果确实存在,它将在embedded式文档(zip)中至less有一个项目,并且应附加到该文档而不是覆盖它。
- 如果不存在,则应将新文档插入到集合中。
当我运行下面的代码,我得到一个错误: 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(); } );
我不认为$push
在$set
内是有效的。 请尝试添加它作为另一个参数,例如:
var params = { '$set': { county: 'Pierce', state: 'WA' }, '$push': { zips: { '$each': ['98499', '98499'] } } }
原因是你没有closures}
所以MongoDB认为$push
是一个字段的名称,并在文档中提到:
字段名称不能包含点(即)或空字符,也不能以美元符号(即$)开头。
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(); } );