在MongoDB中更新embedded式文档

我的文件结构如下:

{_id: 1, country: 'USA', names: [{language: 'en', name: 'New York', state:'new'}, {language: 'es', name: 'Nueva York', state:'translated'}]} {_id: 2, country: 'France', names: [{language: 'en', name: 'Paris', state:'new'}, {language: 'it', name: 'Parigi', state:'translated'}]} ... 

我想更新一个特定语言的项目的状态,如果语言不存在,添加相应的embedded式文档。 例如,我想要更新项目1,为language='es'设置state='new' ,因为该语言存在:

 {_id: 1, country: 'USA', names: [{language: 'en', name: 'New York', state:'new'}, {language: 'es', name: 'Nueva York', state:'translated'}]} 

我想添加一个embedded式文件到项目2与state='new'language='fr'因为它不存在:

 {_id: 2, country: 'France', names: [{language: 'en', name: 'Paris', state:'new'}, {language: 'it', name: 'Parigi', state:'translated'}, {language: 'fr', name: 'Paris', state:'new'}]} 

我怎样才能做到这一点?

谢谢。

您需要使用$位置运算符。 有关更多信息,请参阅http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator

在你的情况下,将是

 db.cities.update({'_id':1,'names.language':'es'},{$set:{'names.$.state':'new'}});