我最近开始开发一个应用程序,最终得到了我的 node .js服务器与我的mongodb数据库通信.

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

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

如果将此对象插入myCollection,然后我try 再次插入一个用户名为Bob但坐标不同的对象,我希望用最新的"用户名":"Bob"对象替换之前的对象.myCollection中只能有一个"用户名"为"Bob"的对象.

如果这是一个关系数据库,我会让Bob成为主键,但我想知道使用mongoDb实现这一点的最佳方式是什么.我应该使用update+upsert方法吗?我试过了,但似乎不管用!

如果这是一个愚蠢的问题,我深表歉意,但我对这一切还是新手.

推荐答案

是的,带有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"创建多个记录,即使是意外:

db.collection.ensureIndex( { "username": 1 }, { unique: true } )

EDIT:

db.collection.ensureIndex()现在已被弃用,是db.collection.createIndex()的别名.所以,使用db.collection.createIndex()来创建索引

Mongodb相关问答推荐

如何限制/筛选子文档中的条目?

没有文档的MongoDB集合中的不一致,但当我执行count()时,它告诉我有15个文档

MongoDB对两个串联数组进行排序

匹配/筛选/投影对象中数组中数组中的嵌套字段

如何在 MongoDB 中的集合下查找同一文档

对 MongoDB 集合中的对象数组进行排序

Mongoose 更新不同类型的记录

在MongoDb的数组中计算大于某个数字的数字

使用 EventSourcing(NodeJS、MongoDB、JSON)跨多个偶尔连接的客户端同步数据

从 MongoDB find() 结果集中识别最后一个文档

$lookup 结果 mongodb 的计数

MongoDB - 清除嵌套数组中的元素

字段类型在 MongoDB 索引中是否重要?

从性能Angular 来看 MongoDB 嵌入式与参考

Mongodb 约定包

MongoDB 3 Java判断集合是否存在

如何仅通过一次调用将一组对象保存到mongoose数据库?

单个语句中的多个 mongo 更新运算符?

在 mongoose 中使用 UUID 进行 ObjectID 引用

带有 either or查询的mongoose findOne