mongodb - 如果不存在则创建文档,否则推送到数组

发布于 2024-10-13 13:02:50 字数 603 浏览 6 评论 0原文

我有一个以下形式的文档:

{
"_id" : ObjectId("4d2d8deff4e6c1d71fc29a07"),
"user_id" : "714638ba-2e08-2168-2b99-00002f3d43c0",
"events" : [
        {
                "profile" : 10,
                "data" : "....."
        }
        {
                "profile" : 10,
                "data" : "....."
        }
        {
                "profile" : 20,
                "data" : "....."
        }
        ...
   ]
 }

我想要某种 upsert 语句。如果已经存在这样的文档,它需要将 event 添加到 user_idevents 数组中,否则需要使用以下命令创建文档事件项目。

可以吗?

I have a document in the following form:

{
"_id" : ObjectId("4d2d8deff4e6c1d71fc29a07"),
"user_id" : "714638ba-2e08-2168-2b99-00002f3d43c0",
"events" : [
        {
                "profile" : 10,
                "data" : "....."
        }
        {
                "profile" : 10,
                "data" : "....."
        }
        {
                "profile" : 20,
                "data" : "....."
        }
        ...
   ]
 }

I'd like to have some sort of upsert statement. It needs to add an event to the events array for user_id in case there is already such doc exist, else it needs to create the doc with the event item.

Can that be done?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

爱人如己 2024-10-20 13:02:50

您可以在 Mongo 中进行更新插入,请参阅 Mongo 文档 中的“使用修饰符进行更新插入”:

您可以使用带修饰符的 upsert
手术。在这种情况下,
修饰符将被应用到
更新标准成员和
结果对象将被插入。

您需要的查询将如下所示:

db.events.update( { "user_id" : "714638ba-2e08-2168-2b99-00002f3d43c0" }, 
{ $push : { "events" : { "profile" : 10, "data" : "X"}}}, {"upsert" : true});

You can do upserts in Mongo, see "Upserts with Modifiers" from the Mongo doc:

You may use upsert with a modifier
operation. In such a case, the
modifiers will be applied to the
update criteria member and the
resulting object will be inserted.

The query you need will look like:

db.events.update( { "user_id" : "714638ba-2e08-2168-2b99-00002f3d43c0" }, 
{ $push : { "events" : { "profile" : 10, "data" : "X"}}}, {"upsert" : true});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文