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