MongoDB更新和插入两个不同的集合

时间:2018-08-01 14:23:31

标签: mongodb concurrency mongodb-query

我有什么:两个收藏夹

  • 用户(包含与用户相关的信息以及他拥有的积分的集合)
  • UserPoints(用于跟踪何时向用户分配点以及用户何时使用点的集合。简而言之,是审核集合。UserPoints包含userId)

我想要的内容:我想根据某些条件更新“用户”集合中的用户积分。同时,我想为每个用户在“ UserPoints”集合中插入一个文档,并输入新更新的点和日志。

我尝试过的事情:我编写了一个updateMany查询,该查询已在某些用户上尝试过,但工作正常。它正在更新“用户”集合中的用户点。但是问题是,我想要被更新的userId,以便可以在“ UserPoints”集合中进行输入。

在MongoDB中有没有办法做到这一点? (我正在使用3.2版)

我当时正在考虑为此编写一个简单的C#程序。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我在下面的查询中使用了

db.users.find({
 "createdDate" : {"$gte": new Date("2017-12-01T00:00:00.000Z"),
                  "$lte": new Date("2018-02-28T00:00:00.000Z")}
         }).forEach(function(doc){
             if (doc.points > 0){
                    db.userPoints.insertOne({
                        userId: doc._id,
                        userCode: doc.userCode,
                        points: NumberInt(doc.points),
                        type: NumberInt(doc.userType),
                    });

                    db.users.updateOne({ _id: doc._id }, { $set: {
                        points: 0,
                        updatedDate: new ISODate("2018-08-02T00:00:00.000Z")
                    }}, false);
             }
         });