{ 
    name: 'book',
    tags: {
        words: ['abc','123'],
        lat: 33,
        long: 22
    }
}

假设这是一个文档。我如何从这个集合中的所有文档中完全删除“单词”?我希望所有的文件都没有“文字”:

 { 
     name: 'book',
     tags: {
         lat: 33,
         long: 22
     }
}

当前回答

db.example.updateMany({},{"$unset":{"tags.words":1}})

我们还可以使用它来更新多个文档。

其他回答

默认情况下,update()方法更新单个文档。设置“多参数”以更新符合查询条件的所有文档。

在3.6版更改。 语法:

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ]
   }
)

例子:

db.getCollection('products').update({},{$unset: {translate:1, qordoba_translation_version:1}}, {multi: true})

在你的例子中:

db.getCollection('products').update({},{$unset: {'tags.words' :1}},  {multi: true})

从Mongo 4.2开始,也可以使用稍微不同的语法:

// { name: "book", tags: { words: ["abc", "123"], lat: 33, long: 22 } }
db.collection.updateMany({}, [{ $unset: ["tags.words"] }])
// { name: "book", tags: { lat: 33, long: 22 } }

由于更新方法可以接受聚合管道(注意方括号表示使用聚合管道),这意味着这里使用的$unset操作符是聚合操作符(而不是“查询”操作符),其语法接受一个字段数组。

在mongoDB shell中,这段代码可能会有帮助:

db.collection.update({}, {$unset: {fieldname: ""}} )

删除或删除MongoDB中的字段

单次记录 db.getCollection(“用户数据”)。更新({},{$unset: {pi: 1}}) 多重记录 db.getCollection(“用户数据”)。更新({},{$unset: {pi: 1}}, {multi: true})

db.example.updateMany({},{"$unset":{"tags.words":1}})

我们还可以使用它来更新多个文档。