【发布时间】:2022-05-11 14:42:26
【问题描述】:
我想配置一个 upsert。如果 _id 已经存在于我的对象上,它会识别并更新匹配。如果_id 不存在,它应该插入新文档并生成一个_id。我希望{ _id: obj._id } 能够工作,但这会覆盖_id 的自动生成。该文档显示为_id: null。有没有适合这个的过滤器?我需要路由以插入/更新代码吗?
编辑:添加查询。
collection.updateOne(
{ _id: entity._id },
{ $set: entity },
{ upsert: true }
)
编辑:尝试删除。 即使我删除了该属性,也没有运气。
const upsertTest = (collection) => {
const entity = { date: new Date() };
console.log(entity);
// { date: 2019-11-19T22:16:00.914Z }
const _id = entity._id;
delete entity._id;
console.log(entity);
// { date: 2019-11-19T22:16:00.914Z }
collection.updateOne(
{ _id: _id },
{ $set: entity },
{ upsert: true }
);
console.log(entity);
// { date: 2019-11-19T22:16:00.914Z }
}
但新文件是这样的: screenshot of new document
【问题讨论】:
-
你的
insertMap()函数是做什么的? -
我打算删除它。在这种情况下,它只返回参数。
-
等一下,我刚刚在 Google 上搜索了一下,可能已经找到了您的答案。您是否对
local数据库进行此查询?显然只有local数据库允许这种行为。任何其他数据库,它都会工作。 -
嗯。是的,它是本地的。
-
是的,您不应该将该数据库用于应用程序。您应该为每个应用程序制作一个新的。如果可以解决问题,我会将其发布为您接受的答案。
标签: mongodb