我最近开始开发应用程序,最后让我的node.js服务器与我的mongodb数据库进行通信。
我想插入一堆看起来像这样的JSON对象:
{
'Username': 'Bob',
'longitude': '58.3',
'latitude': '0.3'
}
如果将此Object插入myCollection,然后我尝试再次使用Username Bob插入一个对象,但坐标不同,我想要最新的'用户名':' Bob&#39 ;要替换之前的对象。在myCollection中只能有一个对象使用'用户名':' Bob'基本上
如果这是一个关系型数据库,我会把Bob作为主键或其他东西,但我想知道用mongoDb做到这一点的最佳方法是什么。我应该使用update + upsert方法吗?我试过了,它似乎没有用!
道歉,如果这看起来像一个愚蠢的问题,但我仍然是所有这一切的新手。
答案 0 :(得分:25)
是的,使用upsert
选项的简单update
查询应满足您的使用案例:
db.collection.update(
{username:"Bob"},
{$set:{'longitude': '58.3', 'latitude': '0.3'}},
{ upsert: true}
)
当您第一次运行上述查询时(即,Bob不存在于集合中),将创建一个新文档。但是,当您第二次使用lat / long的新值运行它时,现有文档将使用新的lat / long值进行更新。
您还可以在username
字段上创建unique index
,以防止Bob' Bob'从偶然创造出来:
db.collection.ensureIndex( { "username": 1 }, { unique: true } )
修改强>
db.collection.ensureIndex()
现已弃用,是db.collection.createIndex()
的别名。因此,使用db.collection.createIndex()
创建索引