Как мы можем сопоставить и обновить, если не присутствует, используя findbyIDandUpdate? - PullRequest
0 голосов
/ 29 января 2020

Я работал над запросом API, чтобы обновить базу данных mongodb, добавив имя дома. Как я могу зарегистрировать одного и того же пользователя на наличие того же доменного имени или нет? ИДЕЯ: У одного и того же пользователя не может быть одинакового houseName, но у других может быть одинаковое houseName

  1. Если присутствует req.body.house-name, не добавляйте
  2. Если req.body.house-name отсутствует, добавьте только

Что я сделал. Внутренний код

//Farm
router.post("/addHouse/:id",(req,res) => {
    const houseName=req.body.houseName;
    User.findByIdAndUpdate(req.params.id,
    {$push:{"house":{houseName}},$currentDate:{lastModified:true,"ModifyDate":
    {$type:"timestamp"}}},
    {safe:true,upsert:true,multi:true,new:true},
    function(err,User){
    if(err){
      console.log(err);
      return res.send(err);
    }
    console.log("Addition Complete To "+User.id)
    return res.status(200).json(User);
    });
});


//Device
//This API checks in all the collection .I want to check inside device array only.
router.post("/addDevice/:id/:houseName/",(req,res) => {
  const houseName=req.body.houseName;
  User.findOne({ 'house.device.deviceName':deviceName }).then(device => {
    if (device) {
      return res.status(400).json({ "Device Name " :  "Device already exists."});
    } else {
  User.findByIdAndUpdate(req.params.id, 
    { $push: { "house.$[house].device": {deviceName} },
     $currentDate:{lastModified:true,"deviceModified":{$type:"timestamp"}} },
      { arrayFilters: [ { "house.houseName": req.params.houseName} ],upsert: true, safe: true, new: true, multi: false},
        function (err, updatedHouse)
         {
          if (err)
          console.log(err);
          res.json({success:true,message:"Farm updated! Roger_That.",body:updatedHouse});
          }); 
    }
  });
});

DOUBT Этот код только добавляет название дома без проверки. Что еще я могу сделать здесь? Я не знаю, как сопоставить переданное имя дома с настоящим доменным именем в mongoDB. Я хочу сделать то же самое для user=>house=>device[], здесь дом не может иметь одно и то же имя устройства, но у другого дома может быть это имя, только для этого пользователя .

Схема

// User Schema
const UserSchema = new Schema({
  name: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true,
  },
  password: {
    type: String,
    required: true
  },
  location:{
      type:String,
      required:true,
  },
  createdDate: {
    type: Date,
    default: Date.now
  },
  house:[
      { houseName:{type:String,index:true}, 
        description:String,
        Latitude:{type:Number,required:true},
        Longitude:{type:Number,required:true},
        AddDate:{type:Date,default:Date.now},
        device:[{Device}]
     }, 
 ],
},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...