使用insert更新mongod中的数组值

时间:2016-06-08 09:35:09

标签: arrays node.js mongodb

我想做以下事项: -

  1. 找到userId,如果存在,则创建一个
  2. 找到userId并将该项目推送到数组中,如果该项目已存在则不要推送
  3. 模式

    var ItemSchema = mongoose.Schema({
        "userId" : {
             type:String
        },
        "item" : []
    });
    

    我可以,findOne然后获取数组,然后找到数组是否存在,否则按下然后保存它。

    很奇怪有没有内置mongoose这样做?

1 个答案:

答案 0 :(得分:0)

解决您的问题:

ItemSchema.findOne({"userId":"yourId"},function(err,data){
   if(data.length > 0){
    console.log("USER EXISTS");
    var newItemPush="newItem";
    //For Task 2
    //Add Item if Item Does not Exits 
    ItemSchema.find({"userId":"yourId"},{ item: { $elemMatch: { item: newItemPush } } },function(err,data){
         if(data.length > 0){
            console.log("ADDING NEW ITEM");
            ItemSchema.findOneAndUpdate({"userId":"yourId"},{ item: { $elemMatch: { item: newItemPush } } },function(err,data){
                if(data){
                   console.log("NEW ITEM PUSHED SUCCESSFULLY");
                }

            });
         }
    }); 
   }
   else {
    //Task 1
    console.log("USER DOES NOT EXISTS NOW CREATE ONE");
    var insertData={
        userId:"newUserId",
        {$push: { item: "your item" } }

    }
    ItemSchema.update({},insertData,function(err,data){
        if(data){
            console.log("DATA INSERTED")
        }
        else{
            console.log("DATA NOT INSERTED:"+err);
        }
    }) 
   }

});