MongoDB / Express - мне нужно обновить два вложенных документа с тем же UUID, но обновляется только один. У обоих поддокатов одинаковый сгенерированный uuid - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь обновить два вложенных документа с одинаковым UUID. Часть сообщений является вложенным документом коллекции, и каждый дополнительный ответ / сообщение затем публикуется в другом вложенном документе в этом исходном вложенном документе. Я получаю одну коллекцию для обновления, а другую нет? Мне удалось заставить их обоих измениться соответственно, но они удвоились (плюс я забыл, как я достиг того эффекта, это было случайно). ПОЖАЛУЙСТА, помогите мне с этим. Я провел почти два дня, возиться с этим. Я создаю систему личных сообщений для собственного приложения, и это важно, чтобы эта функция работала. Спасибо, парни. Напомню ... мой экспресс-маршрут обновляет только одну подколлекцию, но мне нужно обновить КАЖДУЮ подколлекцию с тем же UUID. Пожалуйста, смотрите ниже ...

   renderSubmit = () => {


		// THIS IS THE WORKING INITIAL POST TO THE DATABASE. IT SENDS TO BOTH USERS SUCCESSFULLY - THIS IS THE INITIAL MESSAGE TO THE USER THAT POSTED THE INITIAL POSTING (JOB). 

    	const { navigation } = this.props;

		const propsData = navigation.getParam("data", "NO-ID");


		const date = new Date();
		let minute = date.getMinutes();
		let hour = date.getHours();
		let day = date.getDate();
		let month = date.getMonth();
		let year = date.getFullYear();
		
		let minutesCalc = (minute.length === 1) ? "0" + minute : minute ;

		let hours = date.getHours() % 12 || 12; 

		let ampm = (hours >= 12) ? "PM" : "AM";

		const finalTime = month + "/" + day + "/" + year + " " + hour + ":" + minutesCalc + " " +  ampm;
		console.log("PROPSSSSSDATAAAA", propsData);
		console.log("Submit Clicked.");
		this.setState({
			timestamp: finalTime
		}, () => {
			axios.post("http://10.0.2.2:5000/send/initial/message", {
				email: propsData.email,
				message: this.state.message, 
				timestamp: this.state.timestamp,
				firstName: this.props.firstName,
				lastName: this.props.lastName
			}).then((res) => {
				this.setState({
					data: res.data,
					isModalVisible: false
				}, () => {
					alert("You've successfully messaged this employer!");
				})
			}).catch((err) => {
				console.log(err);
			})

			axios.post("http://10.0.2.2:5000/send/backlash/message", {
				self: this.props.email,
				message: this.state.message, 
				timestamp: this.state.timestamp,
				firstName: this.props.firstName,
				lastName: this.props.lastName
			}).then((res) => {
				this.setState({
					dataSetTwo: res.data
				}, () => {
					console.log(this.state.dataSetTwo);
				})
			}).catch((err) => {
				console.log(err);
			})
		})
	}

const mongoose = require("mongoose");
const express = require("express");
const router = express.Router();
const cors = require("cors");
const app = express();
const config = require("config");
const mongo = require("mongodb");


mongo.connect(config.get("mongoURI"),  { useNewUrlParser: true }, { useUnifiedTopology: true }, cors(), (err, db) => {
	router.post("/", (req, res) => {
		const { uuid, message, timestamp, firstName, lastName, email } = req.body;

		console.log("REQBODYYYYYYYY", req.body);

		const doc = {
			uuid: uuid,
			message: message,
			timestamp: timestamp,
			firstName: firstName,
			lastName: lastName,
			email: email

			// firstName: firstName,
			// lastName: lastName
		}

		let collection = db.collection("registers");  

	    collection.update({ "messages.uuid": uuid }, { "$push": { "messages.$.response": doc } }, { multi: true }, (err, model) => {
	            if (err) {
	            	console.log(err);
	            };
	            res.send(model);
	            console.log(model);
	        }
	    );
	});
});

module.exports = router;

	renderSubmit = () => {
		console.log("Render Submit Clicked .");
		const propsData = this.props.navigation.getParam("data", "NO-ID");

		const date = new Date();
		let minute = date.getMinutes();
		let hour = date.getHours();
		let day = date.getDate();
		let month = date.getMonth();
		let year = date.getFullYear();
		
		let minutesCalc = (minute.length === 1) ? "0" + minute : minute ;

		let hours = date.getHours() % 12 || 12; 

		let ampm = (hours >= 12) ? "PM" : "AM";

		const finalTime = month + "/" + day + "/" + year + " " + hour + ":" + minutesCalc + " ";

		this.setState({
			timestamp: finalTime
		}, () => {
			axios.post("http://10.0.2.2:5000/individual/message/reply", {
				uuid: propsData.uuid,
				message: this.state.message,
				timestamp: this.state.timestamp,
				firstName: this.props.firstName,
				lastName: this.props.lastName,
				email: this.props.email
			}).then((res) => {
				this.setState({
					dataSetTwo: res.data
				}, () => {
					console.log("DATASETTWO:", this.state.dataSetTwo)
				})
			}).catch((err) => {
				console.log(err.response);
			});
		})
	}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...