我是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");
});
我在控制台上同时获得了值SUCCESS
和updated
但是当我检查集合中的值时;他们似乎没有更新。 pageHideTimeStamp
不存在。
问题可能出在更新上,我想根据ID用新记录替换整个记录。
有更好的做法吗?抱歉,我是新来的。谢谢
PS:对我来说,在更新时,我无法遍历添加到该对象的每个参数。除了PageHideTimeStamp之外,还有其他我要添加的参数,并且随着时间的推移可能会更多
答案 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')
})