猫鼬通过req.body键访问子文档

时间:2020-11-12 18:54:40

标签: node.js mongodb express mongoose

我需要200智商!! :)

我有一个这样的架构:

http_auth = (kibana_username, kibana_password)

...

我想更新名称,重复,tst ...

我的要求是:

var ProgramSchema = new mongoose.Schema({
  name: { type: String, required: true, unique: true },
  day1: {
    phase1: {
      exercise1: {
        name: { type: String },
        repetition: { type: String },
        tst: { type: String },
        tdrp: { type: String },
        method: { type: String },
        weightKilo: { type: String },
      },

我们可以使用[req.body.key]:来自req.body的更新密钥的值。 我们可以使用“ key1.key2.key3”更新子文档:值 但是我不知道如何用req.body中的许多键更新子文档。

我上次测试:(:

{
userId: '5f9894d8a987136735f4c62e',
programId: '5fad83103c8b262bd9cdaa10',
day: 'day1',
phase: 'phase1',
exercise: 'exercise1',
exerciseName: 'Test',
repetition: '3x15',
tst: '1',
tdrp: '1',
method: 'Test',
weightKilo: '32'
}

我需要帮助:')亲爱的家伙!

1 个答案:

答案 0 :(得分:0)

您可以这样创建自己的查询对象:

var name = req.body.day+"."+req.body.phase+"."+req.body.exercise+".name"
var query = {}
query[name] = req.body.exerciseName

然后使用此更新:

var update = await model.updateOne({"id": req.body.programId},{$set:query})

这是一个如何处理一个字段的示例,其余字段应采用相同的方式。

编辑说我已经测试过并且可以正常工作:

// Initialize keys names
var name = req.body.day+"."+req.body.phase+"."+req.body.exercise+".name"
var repetition = req.body.day+"."+req.body.phase+"."+req.body.exercise+".repetition";
var tst = req.body.day+"."+req.body.phase+"."+req.body.exercise+".tst";
var tdrp = req.body.day+"."+req.body.phase+"."+req.body.exercise+".tdrp";
var method = req.body.day+"."+req.body.phase+"."+req.body.exercise+".method";
var weightKilo = req.body.day+"."+req.body.phase+"."+req.body.exercise+".weightKilo";

// Add keys with values to the query
var query = {}
query[name] = req.body.exerciseName
query[repetition] = req.body.repetition
query[tst] = req.body.tst
query[tdrp] = req.body.tdrp
query[method] = req.body.method
query[weightKilo] = req.body.weightKilo

// Do the query
var update = await model.updateOne({_id:req.body.programId},{$set:query})