如何在MongoDB中用一条记录替换所有现有记录
在我的应用程序中,我有多个包含如何在MongoDB中用一条记录替换所有现有记录,mongodb,database,Mongodb,Database,在我的应用程序中,我有多个包含用户名和域的记录。 以前,当所有记录在version字段中的值不同时,我会保留所有记录,但现在我只想用一个版本来替换它们 例如,我有一个设备集合,其结构如下: { username: me, domain: stackoverflow.com, version: 1 } { username: me, domain: stackoverflow.com, version: 2 } 只要有新版本,就会不断升级 现在我只
用户名
和域
的记录。
以前,当所有记录在version
字段中的值不同时,我会保留所有记录,但现在我只想用一个版本来替换它们
例如,我有一个设备集合,其结构如下:
{
username: me,
domain: stackoverflow.com,
version: 1
}
{
username: me,
domain: stackoverflow.com,
version: 2
}
只要有新版本,就会不断升级
现在我只希望有一个记录来替换所有现有的文档。每当使用新版本的新文档插入时,匹配用户名和域的所有记录都将消失并合并到新文档中
我尝试了upert:true
和multi:true
选项,但它没有删除旧记录。
任何帮助都会很好。
Upsert
不会删除旧记录。它只能替换或创建新的。()
您需要手动清理旧数据。有几种选择:
版本
,并在保存新版本之前删除所有版本。(清理旧的,然后放下新的)用户名
和域
进行分组,以返回所有组合的列表。然后,对于每个组合,除去最新的(您可以按版本
排序以获得最高版本,然后执行查询,使用$ne
删除除最高版本号以外的所有匹配项)。虽然这会严重影响数据库,但您只需执行一次如果不关心保留哪一个副本,可以通过在两个字段上创建唯一索引来实现,并在调用
ensureIndex
时指定选项,如下所示:
db.device.ensureIndex({username: 1, domain: 1}, {unique: true, dropDups: true})
这将迫使MongoDB通过删除具有重复值的文档来创建唯一索引,只留下每个用户名/域对中的一个(这似乎正是您要寻找的)。我还认为这是唯一的方法。干杯!:)这似乎正是我要找的。谢谢你的回答!