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

时间:2014-04-03 21:39:15

标签: mongodb mongodb-query nosql

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

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

   {
    'Username': 'Bob',
    'longitude': '58.3',
    'latitude': '0.3'
   }

如果将此Object插入myCollection,然后我尝试再次使用Username Bob插入一个对象,但坐标不同,我想要最新的'用户名':' Bob&#39 ;要替换之前的对象。在myCollection中只能有一个对象使用'用户名':' Bob'基本上

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

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

1 个答案:

答案 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()创建索引