使用mongoose使用不同的值更新mongodb子文档

rekjcdws  于 2022-11-13  发布在  Go
关注(0)|答案(1)|浏览(166)

我在我的应用程序中使用mongodb作为后台数据库,并尝试使用mongoose更新一个文档的子文档。
以下是文档的示例架构:

'use strict';
 const mongoose = require('mongoose');

 const activitiesSchema = new mongoose.Schema({
   activityId : {
     type: String
   },
   name: {
     type: String,
   },
   points : {
     type : String
   }
 });

 const sampleSchema = new mongoose.Schema(
 {
   userId: {
     type: String,
     require: true,
   },
   userName: {
     type : String,
   },
   activities: {
     type: [activitiesSchema],
   },
   createdTime: {
     type : Date,
     default: Date.now,
   }
 },
);
const Sample = mongoose.model('Samples', sampleSchema, 'Samples');
module.exports = Sample;

如果activityId001,我希望将name更新为run;如果活动ID是002,我希望将名称更新为walk
这是否可能在单个数据库中执行查找和更新操作?
谢谢你的好意,
KK公司

2w3rbyxf

2w3rbyxf1#

您可以使用update函数的流水线形式,如下所示:

db.collection.update({},
[
  {
    "$set": {
      "activites": {
        $map: {
          input: "$activites",
          as: "item",
          in: {
            activityId: "$$item.activityId",
            points: "$$item.points",
            name: {
              $switch: {
                branches: [
                  {
                    case: {
                      $eq: [
                        "$$item.activityId",
                        "001"
                      ]
                    },
                    then: "run"
                  },
                  {
                    case: {
                      $eq: [
                        "$$item.activityId",
                        "002"
                      ]
                    },
                    then: "walk"
                  },
                  
                ],
                default: "$$item.name"
              }
            }
          }
        }
      }
    }
  }
],
{
  multi: true
})

Playground link

相关问题