更新MongoDB中的嵌入文档

更新MongoDB中的嵌入文档,mongodb,node.js,Mongodb,Node.js,我的文件结构如下: {_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',

我的文件结构如下:

{_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'}]}
...
我想更新特定语言项的状态,如果该语言不存在,则添加相应的嵌入文档。例如,我想更新项目1,为
language='es'
设置
state='new'
,因为该语言存在:

{_id: 1, country: 'USA', names: [{language: 'en', name: 'New York', state:'new'}, {language: 'es', name: 'Nueva York', state:'translated'}]}
我想用
state='new'
language='fr'
向第2项添加一个嵌入式文档,因为它不存在:

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


谢谢。

您需要使用$positional操作符。更多信息,请参阅

在你的情况下是这样的

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

是的,但我想知道我是否可以执行一个操作中描述的操作:更新嵌入文档(如果存在),否则添加嵌入文档。