Javascript 为什么不是';这不是Mongoose更新保存到数据库吗?

Javascript 为什么不是';这不是Mongoose更新保存到数据库吗?,javascript,mongodb,asynchronous,mongoose,Javascript,Mongodb,Asynchronous,Mongoose,我所拥有的是一个函数,它将新日期添加到“类持有”日期数组中 最初,我有一个从在线示例复制的函数,它不是异步的。它使用了一个简单的Mongoose“document.save”调用,并在几天内运行良好。然后它停止更新数组 所以我做了一些调试,并认为我可能需要一个异步函数,但这也不起作用。我知道我做错了什么,但我不知道是什么 下面是我的代码,包括console.logs以显示函数正在执行的操作: this.updateDate = async function () { try {

我所拥有的是一个函数,它将新日期添加到“类持有”日期数组中

最初,我有一个从在线示例复制的函数,它不是异步的。它使用了一个简单的Mongoose“document.save”调用,并在几天内运行良好。然后它停止更新数组

所以我做了一些调试,并认为我可能需要一个异步函数,但这也不起作用。我知道我做错了什么,但我不知道是什么

下面是我的代码,包括console.logs以显示函数正在执行的操作:

this.updateDate = async function () {
    try {
        let today = this.getFullDate(); // returns a string that I use as a date in the database
        await Admin.findOne({'local.className':'2018'}).then(function(course){
            console.log('today: '+today);
            console.log('course: '+course);
            let classesHeld = course.local.classesHeld;
            console.log('classesHeld: '+classesHeld);
            console.log('index: '+classesHeld.indexOf(today));
            if(classesHeld.indexOf(today)=== -1){
                classesHeld.push(today);
                console.log('added today: '+classesHeld);
                Admin.update({'local.className':'2018'},{'local.classesHeld':classesHeld});
                console.log('saved it');
            }
           else{
                console.log('Today\'s date already in database.');
            }
        });

    } catch (error) {
        console.log('Error in update date: ' + error);
    }
}
以下是我在控制台中看到的内容:

today: 7/26/2018
course: { _id: 5b57904b0bed9d3004979604,
  __v: 0,
local:
{ className: '2018',
 classesHeld:
  [ '7/16/2018',
    '7/17/2018',
    '7/18/2018',
    '7/19/2018',
    '7/23/2018',
    '7/24/2018',
    '7/25/2018' ] } }
 classesHeld: 
 7/16/2018,7/17/2018,7/18/2018,7/19/2018,7/23/2018,7/24/2018,7/25/2018
 index: -1
 added today: 
 7/16/2018,7/17/2018,7/18/2018,7/19/2018,7/23/2018,
 7/24/2018,7/25/2018,7/26/2018 // this is correct
 saved it // nope

感谢您的帮助。

您是否尝试过这样更新它: Admin.update({'local.className':'2018'},{$set:{'local.classesHeld':classesHeld}})

您需要使用$set运算符,请查看以下文档:

希望有帮助:)

试试:

await Admin.update({'local.className':'2018'},{$set{'local.classesHeld':classesHeld}});
而不是:

Admin.update({'local.className':'2018'},{'local.classesHeld':classesHeld});

尽管以下方法应该有效

Admin.update({'local.className':'2018'},{$set : {'local.classesHeld' : classesHeld}});
但是因为它对你不起作用。您还可以尝试直接将今日日期推送到local.classesHeld

Admin.update({'local.className':'2018'}, {$push: {'local.classesHeld': today }})

好的,借助@Pointy的提示,我调用的Mongoose函数已经是异步的,并且使用@cheekujha的$push建议,我得到了以下代码:

 this.updateDate = async function () {
    try {
        let today = this.getFullDate();
        Admin.findOne({
            'local.className': '2018'
        }, function (err, course) {
            if (err) {
                console.log('Error in updateDate: ' + err);
            } else {
                let classesHeld = course.local.classesHeld;
                if (classesHeld.indexOf(today) === -1) {
                    Admin.findOneAndUpdate({
                        'local.className': '2018'
                    }, {
                        $push: {
                            'local.classesHeld': today
                        }
                    },{new:true},function(err,obj){
                        if(err){
                            console.log('update error: '+err);
                        }else{
                            console.log('Returned from db: '+obj);
                        }
                    });
                }
            }
        });
    } catch (error) {
        console.log('Error in updateDate: ' + error);
    }
};

我已经在我的应用程序上运行了这段代码几天了,它似乎运行得很好。感谢所有回答这个问题的人,我选择了我自己的答案,因为这是一个完整的工作解决方案,但我借用了这条线索上的多个答案来提出它

你怎么知道更新不起作用?没有您发布的代码试图确定这一点。(注意,
Admin.update()
是异步的,就像
.findOne()
是一样。)直接在mlab中查看数据库集合。它没有更新。该应用程序的其他部分也保存到数据库中,这些部分工作正常。添加了$set操作符,仍然无法工作。不过,感谢您的建议和文档。不客气。您是如何检查更新的值的?通过控制台或db admin panel?使用admin panel,您也可以更新整个本地对象,其中包含className和classesHeld,如下所示:
admin.update({“local.className”:“2018”},{$set:{“local”:{className:classesHeld,classesHeld:classesHeld})
尝试过,但仍然没有更新db。感谢您的建议。