Mongodb update or create function run on single query

46 views
Skip to first unread message

Alone Bala

unread,
Oct 4, 2014, 12:37:57 AM10/4/14
to mongoo...@googlegroups.com
this is my document in worker collection i want when I delete the id. today worker change to 2
workerschema code
var workerSchema = new mongoose.Schema({
userId:{type:Schema.Types.ObjectId, ref: 'User'},
todayWorker:{type:Number,default:0,enum:[0,1,2]}, 
createdDate:{type: Date,default:Date.now }

first time insert new id and set today worker 0. If  i want delete id today worker set2.and again i will insert same id just i need update today worker 0.

   here  when i was delete query run successfully.(update today worker status to 2)but after delete i was insert same id,should not properly working.(not update todayworker)

   I need update or create query run in single command..i tried to use lot of query and also i'm new in mongo..nobody have help me..so give me a best solution.

  //delete worker code(while delete properly changed todatworker status) 
var options1={multi:true};
        //Worker.remove(selection,function(err,status){
            Worker.update(selection,{$set:{todayWorker:2}},options1,function(err,status){
            if(err)
                res.send(err);
            else
            {
                res.json({"success":true,"message":"Workers Deleted"});
            }
        });
//add worker code (but insert time not changed todayworker status)
var idObjects=createObjectIds(idsarray);        
    var selection={_id:{$in:idObjects}};
    //console.log(selection);
    if(todayWorker==0){
        var projection={_id:1};
        var callback1=function(err,users){
            if(err)
                res.send(err);
            else{
                var count1=users.length;                
                for(var i=0;i<count1;i++){
                    Worker.findOneOrCreate({userId:users[i].id},{userId:users[i].id,todayWorker:todayWorker},function(err,worker){
                        //Worker.findAndModify({query:{userId:users[i].id},update{$setOnInsert:{todayWorker:"todayWorker"}}},{ upsert: true },function(err,Worker){
                            //Worker.update({userId:users[i].id},{$setOnInsert:{ userId:users[i].id,todayWorker:todayWorker,createdDate:Date.now()}},{ upsert: true },function(err,Worker){
                        if(err)
                            res.send(err);
                        else
                        {

                            count2++;
                            if(count2==count1)

                                res.json({"status":true,"message":"Worker Added"});
                        }
                    });
                }
            }
        }
        User.find(selection,projection,callback1);
}
else
{
    res.send("No user found");
}

}; 

I was tried to use multiple query..kindly help me and  give best solution..

Reply all
Reply to author
Forward
0 new messages