Mongodb仅在值唯一时插入,否则在node.js中更新

Dea*_*Iss 14 mongodb nosql mongodb-query

我最近开始开发一个应用程序,最后让我的node.js服务器与我的mongodb数据库进行通信.

我想插入一堆看起来像这样的JSON对象:

   {
    'Username': 'Bob',
    'longitude': '58.3',
    'latitude': '0.3'
   }
Run Code Online (Sandbox Code Playgroud)

如果将此Object插入myCollection,然后我尝试使用Username Bob再次插入一个对象,但是使用不同的坐标,我想要最新的'Username':'Bob'对象来替换之前的对象.myCollection中只能有一个带有'Username'的对象:'Bob'.

如果这是一个关系数据库,我会把Bob作为主键或者其他东西,但我想知道用mongoDb做到这一点的最佳方法是什么.我应该使用update + upsert方法吗?我试过了,它似乎没有用!

抱歉,如果这看起来像一个愚蠢的问题,但我仍然是所有这一切的新手.

Ana*_*lan 25

是的,update带有该upsert选项的简单查询应该满足您的用例:

db.collection.update(
   {username:"Bob"},
   {$set:{'longitude': '58.3', 'latitude': '0.3'}},
   { upsert: true}
)
Run Code Online (Sandbox Code Playgroud)

当您第一次运行上述查询时(即,集合中不存在Bob),将创建一个新文档.但是当您第二次使用lat/long的新值运行它时,现有文档将使用新的lat/long值进行更新.

您还可以unique index在该username字段上创建一个,以防止意外创建"Bob"的多条记录:

db.collection.ensureIndex( { "username": 1 }, { unique: true } )
Run Code Online (Sandbox Code Playgroud)

编辑:

db.collection.ensureIndex()现已弃用,是别名db.collection.createIndex().因此,db.collection.createIndex()用于创建索引