{
name: 'book',
tags: {
words: ['abc','123'],
lat: 33,
long: 22
}
}
假设这是一个文档。我如何从这个集合中的所有文档中完全删除“单词”?我希望所有的文件都没有“文字”:
{
name: 'book',
tags: {
lat: 33,
long: 22
}
}
{
name: 'book',
tags: {
words: ['abc','123'],
lat: 33,
long: 22
}
}
假设这是一个文档。我如何从这个集合中的所有文档中完全删除“单词”?我希望所有的文件都没有“文字”:
{
name: 'book',
tags: {
lat: 33,
long: 22
}
}
当前回答
值得一提的是,如果你使用Typegoose/Mongoose,你的字段需要在你的模型中声明,否则$unset将默默失败。
在重构数据库后,这让我没有意识到。多余的字段不再在我的模型中,我正在运行$unset,但什么也没有发生。
因此,如果你正在进行一些重构,请确保在从模型中删除冗余字段之前将其$unset。
其他回答
要删除一个字段,您可以使用这个命令(这将应用于集合中的所有文档):
db.getCollection('example').update({}, {$unset: {Words:1}}, {multi: true});
在一个命令中删除多个字段:
db.getCollection('example').update({}, {$unset: {Words:1 ,Sentences:1}}, {multi: true});
试试这个:如果你的收藏是“榜样”
db.example.update({}, {$unset: {words:1}}, false, true);
参考:
http://www.mongodb.org/display/DOCS/Updating#Updating-%24unset
更新:
上面的链接不再包含“$unset”。如果您想从集合中的所有文档中删除该字段,请确保添加{multi: true};否则,它只会从它找到的第一个匹配的文档中删除它。请参阅更新的文档:
https://docs.mongodb.com/manual/reference/operator/update/unset/
例子:
db.example.update({}, {$unset: {words:1}} , {multi: true});
默认情况下,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})
{ 名称:“书”, 标签:{ 词:[' abc ', ' 123 '), 纬度:33岁 长:22 } }
Ans:
db.tablename.remove ({tags.words: [' abc ', ' 123 ']})
因为我一直在寻找使用蒙古引擎删除字段的方法时找到这个页面,我猜在这里发布蒙古引擎的方式也可能有帮助:
Example.objects.all().update(unset__tags__words=1)