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

       

网上收集的解决方案 "MongoError:$ push中的美元($)前缀字段'$ push'对于存储无效"

我不认为$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(); } );