Я работал над запросом API, чтобы обновить базу данных mongodb, добавив имя дома. Как я могу зарегистрировать одного и того же пользователя на наличие того же доменного имени или нет? ИДЕЯ: У одного и того же пользователя не может быть одинакового houseName, но у других может быть одинаковое houseName
- Если присутствует
req.body.house-name
, не добавляйте - Если
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}]
},
],
},