【问题标题】:How to dynamically use $push in mongo query [duplicate]如何在 mongo 查询中动态使用 $push [重复]
【发布时间】:2017-05-25 20:46:57
【问题描述】:

我有一份格式如下的文件:

{ 
"Students" : {
    "Week1" : {
        "Monday" : [

        ], 
        "Tuesday" : [

        ], 
        "Wednesday" : [

        ], 
        "Thursday" : [

        ], 
        "Friday" : [

        ], 
        "Saturday" : [

        ], 
        "Sunday" : [

        ]
    }, 
    "Week2" : {
        "Sunday" : [

        ], 
        "Monday" : [

        ], 
        "Tuesday" : [

        ], 
        "Wednesday" : [

        ], 
        "Thursday" : [

        ], 
        "Friday" : [

        ], 
        "Saturday" : [

        ]
    }, 
    "Week3" : {
        "Sunday" : [

        ], 
        "Monday" : [

        ], 
        "Tuesday" : [

        ], 
        "Wednesday" : [

        ], 
        "Thursday" : [

        ], 
        "Friday" : [

        ], 
        "Saturday" : [

        ]
    }, 
    "Week4" : {
        "Sunday" : [

        ], 
        "Monday" : [

        ], 
        "Tuesday" : [

        ], 
        "Wednesday" : [

        ], 
        "Thursday" : [

        ], 
        "Friday" : [

        ], 
        "Saturday" : [

        ]
    }, 
    "Week5" : {
        "Sunday" : [

        ], 
        "Monday" : [

        ], 
        "Tuesday" : [

        ], 
        "Wednesday" : [

        ], 
        "Thursday" : [

        ], 
        "Friday" : [

        ], 
        "Saturday" : [

        ]
    }
  }
}

我想使用 Week1 作为变量动态地将一些元素推送到 Students.Week1.Monday。所以我想像这样构建它:

var dbNames = ['Zoe', 'Billy', 'Joey'];
var week = Week1; // week is dynamic entry
var query1 = {};
query1['Students.' + week + '.Monday'] = '$in: ' + dbNames;
Programs.update({ _id: teacherid }, { $push: query1 });

我搞砸了。任何帮助表示赞赏。

【问题讨论】:

    标签: javascript mongodb meteor


    【解决方案1】:

    您可以动态创建对象来解决问题

    var query = {};
    var week = "DYNAMIC_VAL"; // Replace this
    var day = "Monday";  // Dynamic Day
    var dbNames = ['Zoe', 'Billy', 'Joey'];
    query['Students'] = {};
    query['Students'][week] = {};
    
    // query['Students'][week][day] = { '$in': dBNames } // As per your query.
    // but it should not work,
    // if you want to push all elements of dbNames then you can use $each instead of $in
    
    query['Students'][week][day] = { '$each': dBNames };
    
    
    //console.log(JSON.stringify(query, null, 2));
    
    Programs.update({ _id: teacherid }, { $push: query }, callback);
    

    【讨论】:

    • 我认为你不能在这里使用 $in,如果你想推送所有 dbNames 那么你需要使用 $each 而不是 $in
    • 感谢您指出 $each 而不是 $in。我在想 $pull 运算符。您构建对象的方式给出了一个错误,声称它不能将 $push 应用于非数组。我构建对象的方法没有出错,但我错过了(你猜对了)对象的值应该是 { '$each': dbNames }。
    猜你喜欢
    • 1970-01-01
    • 2021-04-25
    • 2017-03-25
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    相关资源
    最近更新 更多