首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用MongoDb方法更新forEach文档?

是否可以使用MongoDb方法更新forEach文档?
EN

Stack Overflow用户
提问于 2020-11-21 18:47:36
回答 1查看 89关注 0票数 0

你好,Stack溢出社区:),

我不知道是否真的可以在MongoDB中使用MongoDB或任何类似的方法更新文档来解决我的问题。我将尽我所能解释这个问题和我所做的努力。

  1. 这里是我使用MongoDB创建的一个模拟数据库,它看起来像这样,_id与问题无关,只有orderId,我将在下面描述:

代码语言:javascript
复制
    {
      "_id": "5fb812f7cd2b101374aa2bd8",
      "orderId": 322,
      "provider": "Barion Bistro"
    },{
      "_id": "5fb812f7cd2b101374aa2bd9",
      "orderId": 400,
      "provider": "Glacier Hotel"
    },{
      "_id": "5fb812f7cd2b101374aa2asd",
      "orderId": 1212,
      "provider": "HM Store"
    },{
      "_id": "5fb812f7cd2b101374aa2bbd",
      "orderId": 322,
      "provider": "Funky Town"
    },{
      "_id": "5fb812f7cd2b101374aa2bb2",
      "orderId": 3223,
      "provider": "Cocktails Bar"
    }

  1. 我试图完成的是使用MongoDB更新函数来更新orderId。我可以一次很容易地将它们更改为所有(总计5),但是我想对文档执行不同的forEach操作,因此一次性进行。通过使用下面的查询,将为整个数据库设置相同的orderId,即所有提供者Bistro、Glacier等.都将具有相同的orderId,在运行下面的查询后为2。

代码语言:javascript
复制
    db.coupons.update({},   
      $set: {
        orderId: 2
      }
    }, {
      multi: true
    })

  1. 我要做的是为每个提供者设置orderId,即第一个提供者Barion将有orderId: 1,第二个提供者将有orderId: 2,第三个提供者have将有orderId: 3,等等。

我在这个问题上已经被困了一个星期了,我不知道使用MongoDB更新是否可以解决这个问题。我尝试的是使用以下不起作用的查询,我想知道是否有人解决了与我类似的问题。查询如下:

代码语言:javascript
复制
    var counter = 1;
    
    db.coupons.update({
     $set: { doc.counterId: counter },
     { multi: true }
    }
    ).forEach(doc => { 
      counter = counter + 1
    })

希望有人能把我引向正确的方向。向你问好,彼得

更新11/21/2020

好吧,RLD是个传奇,他解决了!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-21 20:16:53

如果您正在使用最新的MongoDB,即版本>= 4.2,那么您可以使用forEach方法如下:

代码语言:javascript
复制
var counter=1;
db.coupons.find().forEach( function (d) {
     db.coupons.updateOne({"_id":d._id},[{"$set":{"orderId": counter}}]);
     counter++;
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64946795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档