我收集了foo份文件,包括:

{site_id: 'xxx', title: {ru: 'a', en: 'b'}, content: {ru: 'a', en: 'b'}}
{site_id: 'xxx', title: {ru: 'c', de: 'd'}, content: {ru: 'c', de: 'd'}}

我需要更新多个字段,这些字段可以存在也可以不存在:

db.foo.update(
    { site_id: 'xxx'},
    { $set: {'title.de': '', 'content.de': ''}},
    {multi: true}
)

但我需要像$set这样的东西,如果它存在,它不会覆盖值.

推荐答案

您可以向update语句中添加查询:

db.foo.update({'title.de': {$exists : false}}, {$set: {'title.de': ''}})

使现代化

对于你修改过的问题,我的解决方案是这样的——这对你有用吗?(如果没有,为什么?)

db.foo.update({site_id: 'xxx', 'title.de': {$exists : false}}, {$set: {'title.de': ''}, {multi: true})
db.foo.update({site_id: 'xxx', 'content.de': {$exists : false}}, {$set: {'content.de': ''}}, {multi: true})

Mongodb相关问答推荐

无法从我的NextJS 14应用程序中的Redux工具包2.0中提取数据

MongoDB中的字符串聚合

Tableau 与 Mongo DB Atlas by MongoDB 的连接缓存问题

无法让 Mongoose.js 子文档数组填充

db.createCollection 不是函数

如何使用 Spring Data MongoDB 通过 GridFS ObjectId 获取二进制流

Meteor 如何接收对 MongoDB 查询结果的更新?

mongodump 是否锁定数据库?

Mongodb插入没有_id字段的文档

spring-data-mongo - 可选查询参数?

如何使用 java 驱动程序更新 mongo db 中的文档字段?

Django admin 和 MongoDB,可能吗?

如何使用 MongoDB 和 Mongoid 在 Rails 3 上进行适当的数据库测试 (TDD)

MongoDB聚合将字符串数组连接到单个字符串

无法将 Mongoose 连接到 Atlas

从 nodejs 到 mongodb 或 mongoose 的动态数据库连接

MongoDb 连接被拒绝

何时使用Singleton单例、Transient和使用 Ninject 和 MongoDB 的请求

对于社交网站(使用 Ruby on Rails 开发)来说,MongoDB 会是一个好主意吗?

Meteor 发布/订阅独特客户端集合的策略