使用insert更新mongod中的数组值

我想做以下事情:

  1. finduserId如果存在其他创build一个
  2. finduserId,并将该项目推入数组,如果该项目已经存在不推动

架构

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

我可以做, findOne然后得到数组,然后find数组是否存在,否则推,然后保存它。

只是好奇,有没有build在mongoose这样做?

解决您的问题:

 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); } }) } });