在mongoDB中插入记录,然后更新它-Node.Js

时间:2018-06-21 12:20:44

标签: javascript node.js mongodb collections insert-update

我是nodeJS和MongoDB的新手

我想在PageLoad的javascript事件上向数据库添加一条记录,然后在用户访问期间我向该对象添加值,然后根据分配给该记录的ID在集合中对其进行更新。我正在执行以下操作:

前端:

document.addEventListener('DOMContentLoaded', async() => {

    var ID = function () {    
      return '_' + Math.random().toString(36).substr(2, 9);
    };

    jsLibrary.generateObject().then((objectName) => { 
        objectName.pageLoadTimeStamp = + new Date();
        objectName.identifier = ID;

            $.ajax({
                type:'POST',
                url:'/add',
                data:JSON.stringify(objectName),
                contentType: "application/json; charset=utf-8",
                dataType: "json"
                }); 
});

window.onpagehide = function(){         
        objectName.PageHideTimeStamp = + new Date();

        $.ajax({
            type:'POST',
            url:'/update',
            data:JSON.stringify(objectName),
            contentType: "application/json; charset=utf-8",
            dataType: "json"
        })           
    };

如您所见,我正在为从库中接收的对象分配ID,然后记录页面加载的时间戳并将其发送到后端以将其添加到数据库。然后在pageHide事件中,我保存了用户离开页面的时间戳,并且我想更新集合中的记录以根据其ID重新添加

后端:我的app.js文件

app.post('/add', function(req, res) 
{  
    objName  = (req.body);

    db.components.insert(objName, function(err,res)
            {
                if(err){
                    console.log(err); }
                console.log("SUCCESS");
    });
});

app.post('/update', function(req, res) 
{  
    objName  = (req.body); 

    db.components.update( { identifier: objName.identifier }, objName, true )

    console.log("updated");
 });

我在控制台上同时获得了值SUCCESSupdated

但是当我检查集合中的值时;他们似乎没有更新。 pageHideTimeStamp不存在。

问题可能出在更新上,我想根据ID用新记录替换整个记录。

有更好的做法吗?抱歉,我是新来的。谢谢

PS:对我来说,在更新时,我无法遍历添加到该对象的每个参数。除了PageHideTimeStamp之外,还有其他我要添加的参数,并且随着时间的推移可能会更多

2 个答案:

答案 0 :(得分:0)

更新条件应该只包含您需要应用的支票,就像应该的那样, let cond = {'id':'22'}或cond = {'name':'sss'}, 您正在使用req.body整个对象作为条件,您可以尝试这样的代码

db.update(condition,data,this.table,function (err,refresh) {
        if(err){
            //console.log('err controler', refresh)
            callback(err, null);
            return;
        }
        //console.log('updated ', refresh)
        callback(null,refresh);


});

答案 1 :(得分:0)

使用$set来更新数据

     db.components.update( { identifier: objName.identifier }, {$set : objName},function(err,result){
  console.log('updated')
})