Вопросы с тегами [mongoose]

1

голосов
1

ответ
456

Просмотры

Удалить атрибут объекта с картой массива

У меня есть массив объектов. Каждый элемент массива имеет атрибут, который я хотел бы удалить. Мой код: // удалить ключ версии '__v' вар элементы = elements.map (! Функция (элемент) {если (элемент .__ v == неопределенная) {удалить элемент .__ v; //console.log(element.__v) ;} возвратный элемент;}); // elements.map () console.log (элементы); Если я раскомментировать console.log (элемент .__ v) ;, я получаю значение атрибутов __v. Тем не менее, в конечном выходе, элементы все еще содержат __v атрибуты по-прежнему существует.
reggie
-1

голосов
3

ответ
102

Просмотры

Невозможно добавить дополнительный элемент (мангусты) объект

У меня есть nodejs экспресс-приложения с API для получения данных из базы данных MongoDB. Это мой мангуст модель: Const bookingSchema = новый mongoose.Schema ({метка времени: {Тип: Дата, по умолчанию: Date.now, требуется: истинно}, теги: {тип: [String], требуется: истинно}, количество: { Тип: Number, требуется: истинно}, тип: {Тип: String, требуется: правда, перечисление: [ 'счет', 'доходы']}}) Когда я звоню ИПН с пути / API / заказа / listbymonth / 2019/1 эта функция внутри бэкэндом вызывается: Const bookingsListByMonth = (REQ, Рез) => {сопз год = ( "0000" + req.params.year) .slice (-4) сопзЬ месяц = ​​( "0000" + req.params.month) .slice (-2) Const dateOfMonth = `$ {год} $ {месяц} 01` Const начать = момент (dateOfMonth) .startOf ( "месяц" ) Const конец = момент (dateOfMonth) .endOf ( "месяц") bookingMongooseModel .find ({метка времени: {$ Gt: начать, $ л: конец}}) ({.sort метку времени: 1}) .exec ((ERR, заказы) => {если (заказы) {возвращение разреш .status (404) .json ({ "сообщение": "бронирование не найден"})} еще если (ERR) {вернуться Рез .status (404) .json ( ERR)} разреш .status (200) .json (processBookings (заказы));})} Вместо того, чтобы просто возвращает данные в формате JSON, я хочу предобработки данных и сделать хорошую отметку времени и валюты поле. Вот почему данные JSON проходит через дополнительную функцию processBookings. Для тестирования я пытался добавить еще одно поле timestamp2: 123: Const processBookings = (заказы) => {console.log ( "Заказ несортированная: \ п" + заказы + "\ п") = Const mainTags [ "Эссен", "Эссен gehen", "Notwendiges", "Luxus",] пусть bookingsProcessed = [] mainTags.forEach ((тэг) => {пусть singleTagBookings = bookings.filter (бронирование => booking.tags.includes (тэг)) singleTagBookings.map ((пункт) => {item.timestamp2 = «123 "возвращение пункт}) пусть сообщение = NULL; если (singleTagBookings.length === 0) {сообщение = "нет заказов не найдено";} bookingsProcessed.push ({имя: тег, бронирование: singleTagBookings, сообщение: сообщение})}) ; console.log ( "Заказ отсортирован:") bookingsProcessed.forEach ((пункт) => {консоли. войти (пункт)}) возвращает bookingsProcessed} Объекты в массиве заказы должны иметь другое свойство timestamp2: «123», но они этого не делают. Вот результат: Заказы несортированные: {теги: [ 'Luxus', 'voluptatem', 'atque', 'дш', 'SÜNT'], _id: 5cb2c9e1ff6c9c6bef95f56f, метка времени: 2019-01-06T08: 53: 06.945Z, количество : 68,02, типа: 'расход', __v: 0}, {теги: [ 'Эссен gehen', 'ут', 'недеформированной', 'и др', 'officiis'], _id: 5cb2c9e1ff6c9c6bef95f56e, метка времени: 2019-01- 09T20: 35: 06.411Z, количество: 33.77, типа: 'доход', __v: 0} Заказ отсортирован: {имя: 'Эссен', бронирование: [], сообщение: "нет заказов не найдено} {имя:«Эссен gehen », бронирование: [{теги: [Массив], _id: 5cb2c9e1ff6c9c6bef95f56e, Отметка времени: 2019-01-09T20: 35: 06.411Z, количество: 33,77, тип: 'доход', __v: 0}], сообщение: NULL} {имя: '' Notwendiges, заказы: [], сообщение: «Нет заказов найдено»} {имя: 'Luxus', бронирование: [{теги: [массивы] _id: 5cb2c9e1ff6c9c6bef95f56f, метка времени: 2019-01-06T08: 53: 06.945Z, количество: 68,02, тип: 'расход', __v: 0 }], сообщение: нулевой} Как и в комментариях предложил я пытался использовать пусть заказы = [{тэги: [ "Essen"]}]; в качестве тестовых данных. Здесь он работает. Выход: Заказы несортированное: [объект Object] Заказы отсортированный: {имя: 'Эссен', бронирование: [{теги: [Массивы], timestamp2: '123'}], сообщение: NULL} {имя: 'Эссен gehen' , заказы: [], сообщение: "нет заказов не найдено} {имя: ' Notwendiges', бронирование: [], сообщение: "Нет заказов не найдено} {имя:„Luxus“, заказы: [], сообщение:„Нет заказов не найдено“} Так что я предполагаю, что это что-то делать с моей мангуст модель ограничения на добавить любое дополнительное поле. Однако если я ставлю console.log ( "Расширяемый" + Object.isExtensible (бронирование)) Рез .status (200) .json (processBookings (заказы)); в мою функцию bookingsListByMonth я получаю: EXTENSIBLE верно Итак, в теории я должен быть в состоянии что-то добавить к объекту заказов? В качестве обходного пути я добавил поле timestamp2 к моим мангустам модели: константный bookingSchema = новый mongoose.Schema ({метка времени: {Тип: Дата, по умолчанию: Date.now, требуемая: истинно}, timestamp2: {Типа: String, по умолчанию: NULL }, теги: {типа: [String], требуется: истинно}, количество: {Тип: Number, требуется: истинно}, тип: {Тип: String, требуется: правда, перечисление: [ «счет», «доходы»]}}) Это работает, однако он добавляет дополнительное поле бесполезных данных в моей базе данных. Как я могу изменить объект заказов JSon возвращенный из MongoDB? Если я не могу изменить его, потому что это модель мангуста, как я могу сделать копию, которая редактируется?
mles
1

голосов
0

ответ
88

Просмотры

How do I get rid of BSON objects after a mapReduce?

I'm a complete beginner to map-reduce and relatively new with MongoDB. I am trying to perform a map-reduce on a collection (by the name Customers). My map function: var map = function() { emit(this.nationality, {edad: this.age, telefono: this.phone_number}); }; My reduce function: var reduce = function(key, values) { return Array.sum(values); }; I call mapReduce() as follows: db.Customers.mapReduce( map , reduce , { out : { inline : 1}} ); Finally my result field is: "results" : [ { "_id" : "Brazil", "value" : { "edad" : 34, "telefono" : null } }, { "_id" : "Colombia", "value" : "[object BSON][object BSON]" }, { "_id" : "Germany", "value" : { "edad" : 18, "telefono" : 2986 } }, ... As you can see it contains BSON objects, the problem being that I can't find a way to visualize the content of these BSONs, not even in Robomongo. I have looked for other answers in Stackoverflow addressing this, so far I have found this: "Your reduce function must return the same format that your map function emits". But being honest, I haven´t managed to figure out how do I apply it to solve my problem. I mean, what is the format of my emit? And in which format is the output of my reduce function? If anyone could provide me the exact code lines, my gratitude in advance.
1

голосов
1

ответ
17

Просмотры

Mongoose и вложенные массивы

Моя схема пусть citySchema = новый mongoose.Schema ({...}); пусть countrySchema = новый mongoose.Schema ({регионы: [{города: [ссылка: 'Город']}]}); Проблема - как вставить существующий город в регион выбран (по _id). _Id из области автомагический добавляют мангустов / MongoDB, и я не хочу, чтобы изменить его, так как она должна оставаться стабильной. В настоящее время я пробовал различные комбинации findOneAndUpdate, но напрасно. Мой текущий запрос: Страна .findOneAndUpdate ({_id: knownCountryId, 'regions._id': knownRegionId}, {$ толчок: { '. Регионы $ города': existingCity._id}}, {выберите: { 'регионы': { $ elemMatch: {_id: knownRegionId}.}}}) Exec (); Любые намеки?
Chris
1

голосов
1

ответ
194

Просмотры

Дождитесь сохранения перед продолжением функции

У меня есть цикл, который перебирает массив пользователей, этот цикл является асинхронным, что я хочу сделать, это для каждого пользователя создать новый документ и сохранить его и ждать этого, чтобы сохранить и затем перейти к следующему пользователю. Я могу справиться, когда переходить к следующему пользователю, поэтому моя проблема при сохранении новых данных документов. Я использую мангуст метод сохранение. Основная функция выполняется цикл, вот пример. Примечание: 'асинхронный' является асинхронным модуль v2.6.0 async.forEach (пользователи, (пользователь, обратный вызов) => {console.log ( `Проверки $ {user.first_name}`); createNewDocument (пользователь, (ERR) => {если (! эээ) {console.log ( "Новый документ создан."); обратный вызов ();}}, (ERR) => {если (ERR) {console.log ( "Все пользователи были обновлены"); }});}, не связанные с асинхронными пользователями метода. Foreach ((пользователь) => {console.log ( `Проверка $ {user.first_name}`); createNewDocument (пользователь, (ERR) => {если (ERR) {console.log ( "Новый документ создан.")! ;}});}); Функция Функции createNewDocument createNewDocument (пользователь, обратный вызов) {console.log ( "Создание нового дока ..."); пусть DOC = новый док (); doc.save ((ERR) => {если (ERR) {console.log ( `Новый документ, созданный для пользователя $ {user.first_name}`);! обратного вызова;}}); console.log ( «Создание нового док закончил выполнение ...»); } Все выполняется, и последняя вещь, которую я получаю в моем журнале есть куча «Новый документ, созданный для пользователя ....» для всех пользователей. Я попытался довольно много вещей, я попытался поставить doc.save в обещании, но это не сработало, а также, не уверен, что я должен делать. EDIT: Это важно для меня, чтобы создать новый документ, прежде чем перейти к следующему пользователю, я не хочу, чтобы добавить их в вызовы массив, а затем выполнить его, мне нужно сделать проверку, что предыдущий документ действительно существует, и принять некоторые данные из него на следующий раз, когда цикл входит
Muhand Jumah
1

голосов
0

ответ
41

Просмотры

MongoDB / Mongoose: агрегат - нужно запросить по диапазону дат

У меня есть аналогичный вопрос к предыдущему, который я имел: Mongoose агрегат, не может динамически добавлять SomeField: {$ нет; нуль} Я пытаюсь выполнить запрос диапазона дат. Это моя попытка синтаксиса, который является неправильным (и выбрасывает такую ​​же ошибку, как указано в предыдущем номере): если (TypeOf dateBeginning === «строка» && dateBeginning = «» && TypeOf dateEnding === «строка» && dateEnding = "") {query.date = {$ и: [{$ GTE: новая Дата (dateBeginning)}, {$ Г: новая Дата (dateEnding)}]!}; }
Jeff Matthews
1

голосов
2

ответ
1.3k

Просмотры

Не могу поймать ошибки для Mongoose Модель Сохранить

У меня есть простая схема пользователя: /schemas/user.js уаг мангуст = требуется ( «мангуст»); Схема вар = mongoose.Schema; вар userSchema = новая схема ({имя пользователя: {Тип: String, требуется: правда, уникальный: истинный}, адрес электронной почты: {Тип: String, требуется: правда, уникальный: истинный}, пароль: {Тип: String, требуется: истинно} , группа: String, created_at: Дата, updated_at: Дата}); вар пользователя = mongoose.model ( 'Пользователь', userSchema); module.exports = Пользователь; А индекс страница с формой, которая способна создавать пользователь. Я хочу, чтобы отобразить мгновенное сообщение пользователю, если спасбросок не работает должным образом. Я знаю, что помещение, чтобы сделать это, чтобы создать место для сообщения в маршруте Досталось и если существует сообщение, то вынести Dóm элемент, содержащий сообщение. К сожалению, все, что я могу управлять, чтобы разбить сервер и получить: Сообщение об ошибке events.js: 160 перекидной эр; // необработанного 'ошибки' событие ^ BulkWriteError: E11000 дубликат ключей ошибки: индекс test.users: EMAIL_1 DUP ключа: {: "[email protected]"} в /home/bob/sites/mysite.ca/projects/login /node_modules/mongodb/lib/bulk/unordered.js:528:15 на handleCallback (/home/bob/sites/mysite.ca/projects/login/node_modules/mongodb/lib/utils.js:128:55) в ResultHandler (/home/bob/sites/mysite.ca/projects/login/node_modules/mongodb/lib/bulk/unordered.js:454:5) при /home/bob/sites/mysite.ca/projects/login/node_modules/ MongoDB-ядро / Библиотека / соединение / pool.js: 541: 18 в _combinedTickCallback (внутренний / процесс / next_tick.js: 73: 7) в process._tickCallback (внутренний / процесс / next_tick.js: 104: 9) / маршруты / index.js вар экспресс = требуется ( 'экспресс'); вар маршрутизатор = express.Router (); вар мангуст = требуется ( «мангусты»); mongoose.connect ( 'MongoDB: // локальный / тест'); вар дБ = mongoose.connection; db.on ( 'ошибка', console.error.bind (консоль, 'Ошибка соединения:')); db.once ( 'открытый', функция () {console.log ( 'index.js дб подключен!');}); вар пользователя = требуется ( '../ схемы / пользователь'); router.post ( '/ создания', функция (Req, Рез, следующий) {вар пользователь = новый пользователь ({имя пользователя: req.body.username, электронная почта: req.body.email, пароль: req.body.password}) ; user.save (функция (ошибка) {если (ошибка) console.log (ошибка); console.log ( 'User' + user.username + 'успешно создан!');});}); / * GET домашняя страница. * / Router.get (функция '/', (REQ, разреш, следующий) {res.render ( 'Index', {название: 'Экспресс'});}); module.exports = маршрутизатор; Как я могу поймать эту ошибку и справиться с ней, а не сбой сервера узла?
Dave
1

голосов
2

ответ
82

Просмотры

Mongoose promise in foreach failed in my case

Как сделать обещание с Foreach? Я хочу, чтобы все рабочие места, но и получить данные заявителей. Моя схема работы уже есть идентификатор заявителя, но, как запрос пользователя и объединить их детали на выходе? . Job.find ({}), а затем (результат => {result.forEach (OBJ => {Const applicant_id = obj.applicant._id, если (applicant_id) {User.findOne ({_ ID: applicant_id}) .then (пользователь = > {возвращение res.json ({состояние: 1, данные: {... OBJ, заявитель: {... пользователя}}})}.)}})}) задвижка (ERR => {если (ERR) { вернуться res.status (400) Пошлите ({тзд: эээ}).}}) Я попытался Promise, но я застрял пользователя, переходящего в OBJ работы, Job.find ({}), то (результат => {пусть promiseArray = [] result.forEach (OBJ =>
Jenny Mok
1

голосов
1

ответ
98

Просмотры

Mongoose / MongoDB .find запрос () любой Int> 0?

Таким образом, у меня есть мангуста схема, которая выглядит следующим образом. вар информация = новый mongoose.Schema ({ '123': {доступно: {Тип: 'Строка'}, onOrder: {тип: 'Строка'}}, '456': {доступно: {Тип: 'Строка'}, onOrder: {типа: 'строка'}}, '789': {доступно: {типа: 'Строка'}, onOrder: {типа: 'Строка'}}}); Я ищу, чтобы найти и номер в соответствующем поле, которое> 0. Лишь некоторые из них будут заполнены в любой момент времени. «Пустые» строки всегда будут заполнены значением числа «0.00000000», если не некоторое целое число в нем. Я ищу для запроса, который будет проходить через и найти и строки, которые не 0.00000000 или может преобразовывать строки в целые числа, то можно найти что-нибудь> 0. Я чувствую, что моя первая мысль о нахождении их на основе строк является своего рода Hacky в пути, и я ищу для более постоянного способа получения номера из базы данных, как это. Я Пытался сделать это с $ в уже, но я не могу заставить его работать.
Echo
1

голосов
1

ответ
77

Просмотры

Как портировать этот Mongoose плагин для Mongoose 5

Мне нужна помощь в портировании этого плагин для Mongoose 5 https://github.com/janez89/mongoose-materialized плагин, вероятно, не работает из-за mpromise устаревшим на Mongoose 5. получает ошибку о запуске какого-либо метод с использованием мангустом схемой посыла распознавателя неопределенным является не функция Однако, когда я пытаюсь заменить mongoose.promise, я не могу понять, как включить в новое обещание распознаватель
Enrique Sabalza
1

голосов
0

ответ
67

Просмотры

Express server crashes after MongoDB performs an operation

Я кодирование до сервера Node.js с помощью ExpressJS и MongoDB с MongooseJS. У меня есть коллекция, в которой я хочу, чтобы каждый документ, чтобы жить только в течение 24 часов. После этого я хочу DB, чтобы удалить документ. Я использовал два подхода - чистый раствор MongoDB и с использованием пакета НОЙ мангуст-ТТЛИ. Каждый из них работает так же в моем случае - Монго делает запрос, который удаляет слишком старые документы и сразу после этого мои ExpressJS сервера падает с ошибкой: Ошибка: сокет повесил трубку. Код для мангуст-ТТЛ случае: Const = ТТЛ требуется ( «Мангуст-ТТЛ»); Const = weatherMeasurementsSchema схема ({parentRoomId: {Тип: Schema.Types.ObjectId, ссылка: "Номер"}, температура: Количество, влажность: Количество, createdAt: Дата}); weatherMeasurementsSchema.plugin (ТТЛ, {ТТЛ: "1й", интервал: "1й"}); Код для чистого MongoDB случая: дБ. measurements.createIndex ({ «createdAt»: 1}, {expireAfterSeconds: 60}) Для тестирования я установил ТТЛ и интервальных полей всего 1 минуту, так что я могу обобщать ранее. У меня совершенно не знаю, что это неправильно, не что-то с подключением к БД? Для подключения к БД я использую: mongoose.connect ( "MongoDB: //127.0.0.1/wisehome", {useMongoClient: истинный}); EDIT: Я собрал сообщения об ошибках (одинакова для обоих случаев): Ошибка: разъем повесить на createHangUpError (_http_client.js: 253: 15) в Socket.socketOnEnd (_http_client.js: 345: 23) в emitNone (events.js : 91: 20) в Socket.emit (events.js: 185: 7) при endReadableNT (_stream_readable.js: 974: 12) _combinedTickCallback (внутренний / процесс / next_tick.js: 80: 11) в process._tickCallback (внутренний /process/next_tick.js:104:9) 60}) Для тестирования я установил ТТЛ и интервальных полей всего 1 минуту, так что я могу обобщать ранее. У меня совершенно не знаю, что это неправильно, не что-то с подключением к БД? Для подключения к БД я использую: mongoose.connect ( "MongoDB: //127.0.0.1/wisehome", {useMongoClient: истинный}); EDIT: Я собрал сообщения об ошибках (одинакова для обоих случаев): Ошибка: разъем повесить на createHangUpError (_http_client.js: 253: 15) в Socket.socketOnEnd (_http_client.js: 345: 23) в emitNone (events.js : 91: 20) в Socket.emit (events.js: 185: 7) при endReadableNT (_stream_readable.js: 974: 12) _combinedTickCallback (внутренний / процесс / next_tick.js: 80: 11) в process._tickCallback (внутренний /process/next_tick.js:104:9) 60}) Для тестирования я установил ТТЛ и интервальных полей всего 1 минуту, так что я могу обобщать ранее. У меня совершенно не знаю, что это неправильно, не что-то с подключением к БД? Для подключения к БД я использую: mongoose.connect ( "MongoDB: //127.0.0.1/wisehome", {useMongoClient: истинный}); EDIT: Я собрал сообщения об ошибках (одинакова для обоих случаев): Ошибка: разъем повесить на createHangUpError (_http_client.js: 253: 15) в Socket.socketOnEnd (_http_client.js: 345: 23) в emitNone (events.js : 91: 20) в Socket.emit (events.js: 185: 7) при endReadableNT (_stream_readable.js: 974: 12) _combinedTickCallback (внутренний / процесс / next_tick.js: 80: 11) в process._tickCallback (внутренний /process/next_tick.js:104:9) У меня совершенно не знаю, что это неправильно, не что-то с подключением к БД? Для подключения к БД я использую: mongoose.connect ( "MongoDB: //127.0.0.1/wisehome", {useMongoClient: истинный}); EDIT: Я собрал сообщения об ошибках (одинакова для обоих случаев): Ошибка: разъем повесить на createHangUpError (_http_client.js: 253: 15) в Socket.socketOnEnd (_http_client.js: 345: 23) в emitNone (events.js : 91: 20) в Socket.emit (events.js: 185: 7) при endReadableNT (_stream_readable.js: 974: 12) _combinedTickCallback (внутренний / процесс / next_tick.js: 80: 11) в process._tickCallback (внутренний /process/next_tick.js:104:9) У меня совершенно не знаю, что это неправильно, не что-то с подключением к БД? Для подключения к БД я использую: mongoose.connect ( "MongoDB: //127.0.0.1/wisehome", {useMongoClient: истинный}); EDIT: Я собрал сообщения об ошибках (одинакова для обоих случаев): Ошибка: разъем повесить на createHangUpError (_http_client.js: 253: 15) в Socket.socketOnEnd (_http_client.js: 345: 23) в emitNone (events.js : 91: 20) в Socket.emit (events.js: 185: 7) при endReadableNT (_stream_readable.js: 974: 12) _combinedTickCallback (внутренний / процесс / next_tick.js: 80: 11) в process._tickCallback (внутренний /process/next_tick.js:104:9)
Aleksander Sadaj
1

голосов
0

ответ
91

Просмотры

Pre remove hook is firing but not deleting reference (Mongoose)

I added a pre-remove hook to the "catch schema" to delete all references in the "location schema." Here is my catch model: var mongoose = require("mongoose"); var catchSchema = mongoose.Schema({ species: String, weight: String, image: String, catchlocation: String, catchlocationid: String, description: String, timePosted: { type: Date, default: Date.now }, author: { id: { type: mongoose.Schema.Types.ObjectId, ref: "User" }, username: String } }, {timestamps: true} ); catchSchema.pre("remove", function(next) { console.log("The remove function has fired"); Location.remove({ catches: this._id }, next); }); module.exports = mongoose.model("Catch", catchSchema); And here is the location schema that's holding the references: var locationSchema = new mongoose.Schema({ name: String, gps: String, thumbnail: String, image: String, description: String, catches: [ { type: mongoose.Schema.Types.ObjectId, ref: "Catch" } ] }); var Location = mongoose.model('Location', locationSchema); The strange thing here is when deleting a "catch" the pre-remove hook is being fired, but the referencing ObjectId is not being deleted.
Ronald Long
1

голосов
0

ответ
127

Просмотры

Mongoose hangs on find() query

Я занимаюсь разработкой бэкенд для веб-сайта. Основное приложение использует KeystoneJS обеспечить админ интерфейс для тех, кто создает контент, и Keystone работает поверх MongoDB (в частности, мангуст). Содержание подается на основной веб-сайт и мобильное приложение, и таким образом, чтобы обеспечить внутренний сервер API для них я пишу отдельное приложение Express. Сервер бэкенда пытается получить доступ к основной базе данных, используя Монго мангуста. Я называю mongoose.connect (), используя следующую строку соединения и опции: Var db_connection = 'MongoDB: // db_user: db_pass @ LOCALHOST: 27017 / дб'; вар db_options = {autoReconnect: ложные, bufferMaxEntries: 0, PoolSize: 10,}; Соединение успешно открыт, как и протоколируется mongoose.connection.on ( «подключен», ...); и я могу вручную посмотреть на базу данных, используя оболочку MongoDB, чтобы подтвердить, что есть документы в базе данных. Однако, когда я пытаюсь запрос к базе данных, используя: Var события = Event.find (); events.exec ((эээ, события) => {console.log ( '/ API / события: события нашли, посылая клиенту'); если (ERR) res.send (ERR); res.json (события);} ) .catch (ERR => console.log ( 'ошибка:' + ERR)); где событие является keystone.list ( «событие»). модель, зависает запрос и ехес обратного вызова никогда не вызывается, так как журнал консоли никогда не печатается на терминале. Я правильно инициализирован Keystone и импортировать модели, поэтому я не считаю, что проблема с моделью Keystone, но с самым мангустом. Кроме того, если я выполнить приведенный выше код внутри приложения Keystone, он работает успешно, но только не в моем бэкэнде Экспресса приложения.
ianbrault
1

голосов
0

ответ
81

Просмотры

Node.js: IndexOf возвращение -1, даже если элемент находится в массиве

Я хочу, чтобы пользователи имели возможность нажать кнопку, которая выталкивает его имя и идентификатор в массив, связанный с коллекцией в базе данных, но только если они уже не в этом массиве. Мое решение: вар isInGroup = функция (пользователь, обр) {вар матч = arr.indexOf (пользователь); console.log ( ">>>>>>>" + матч); если (матч === -1) {arr.push (пользователь); console.log ( "добавлен пользователь"); } Еще {console.log ( "Уже в группе"); }}; Это работает, когда я проверить его на примерах массивов в консоли, но не тогда, когда я запросы к базе данных. Когда я выполняю функцию в моем приложении, arr.indexOf = -1, даже если пользователь уже находится в массиве. Это соответствующий код: Player.js вар экспресс = требуется ( "экспресс"), маршрутизатор = express.Router ({mergeParams: истинный}), Игра = требуется (»../ модель / игра "), игрок = требуется (" ../ модели / плеер "), User = требуется (" ../ модель / пользователь "), промежуточный слой = требуется (" ../ промежуточный слой "); // Добавляем router.post игрока ( "/", middleware.isLoggedIn, функция (Req, Рез) {// найти игру Game.findById (req.body.game, функция (эээ, foundGame) {console.log (» >>>>»+ foundGame), если (ERR) {req.flash ( "ошибка", "Что-то пошло не так");.} еще {// создать игрок Player.create (req.user, функция (эээ, игрок ) {если (ERR) {console.log ( ">>>> ошибка" + проигрыватель); res.redirect ( "назад");} еще {player.id = req.user_id; player.username = req.user.username; middleware.isInGroup (игрок, foundGame.players); foundGame.save (); res.redirect ( "назад"); }}); }}); }); Игровые схемы вар мангуст = требуется ( «Мангуст»); вар gameSchema = новый mongoose.Schema ({имя: String, автор: {идентификатор: {Тип: mongoose.Schema.Types.ObjectId, ссылка: "Пользователь"}, имя пользователя: String}, суд: {идентификатор: {тип: mongoose.Schema.Types.ObjectId, ссылка: "Суд"}, имя: String}, игроки: [{ID: {Тип: mongoose.Schema.Types.ObjectId, ссылка: "Игрок",}, имя пользователя: String} ], Время: {старт: String, конечная: строка}, дата: String,}); module.exports = mongoose.model ( "Игра", gameSchema) игрок схема вар мангуст = требуется ( "Мангуст"); вар playerSchema = новый mongoose.Schema ({идентификатор: {Тип: mongoose.Schema.Types.ObjectId, ссылка: "Пользователь"}, имя пользователя: String}); module.exports = mongoose.model ( "Игрок", playerSchema); Пользователь схемы вар мангуст = требуется ( «мангуст»), passportLocalMongoose = требуется ( «паспортный местный мангуст»); вар userSchema = новый mongoose.Schema ({имя пользователя: String, пароль: String}); userSchema.plugin (passportLocalMongoose); module.exports = mongoose.model ( "Пользователь", userSchema); Как уже упоминалось выше, обр. IndexOf (пользователь) возвращает -1, даже если пользователь уже в массиве. Почему это происходит? Есть ли лучшее решение этой проблемы? Спасибо за помощь. Я стучал голову на некоторое время на этом.
Josh
1

голосов
1

ответ
48

Просмотры

MongoDB исчезает атрибуты при сохранении

Привет им с помощью MongoDB + Мангуст и какое-то странное волшебство происходит в моем приложении. Ive определило мою схему, как вар схемы = mongoose.Schema ({имя пользователя: {Тип: mongoose.Schema.ObjectId, ссылка: 'Профиль', необходимо: истинно}, пользователь {Тип: mongoose.Schema.ObjectId, ссылка: «Профиль ', требуется: верно}, сообщение: String}); Как я сохранить документ новая запись имеет бен сохраняются и хранятся. Он имеет сообщение и реф на профиль в имени пользователя, а поле пользователя отсутствует. То же самое происходит, если я переименовать его в USERID: / Registered предварительно сохранить слушателя: уже не хватает в функции обратного вызова, прежде чем сохранить Там нет ошибки, и я не знаю, как справиться с этой ситуацией. Пожалуйста помоги. Назвали бы в команду, но я не могу себе позволить редактирование: Полный схемы вар мангуст = требуется ( «мангуст»); вар схема = mongoose.Schema ({имя пользователя: {Тип: mongoose.Schema.ObjectId, ссылка: " Профиль», требуется: истинно}, пользователь {Тип: mongoose.Schema.ObjectId, ссылка: 'Профиль', необходимо: истинно}, сообщение: String}); вар = функция заполняются автоматически (следующий) {this.populate ( 'пользователь'); this.populate ( 'имя пользователя'); следующий(); }; вар autoReduce = функция (следующий) {если (this.username) {this.username = this.username._id; } Если (this.user) {this.user = this.user._id; } следующий(); }; схемы. предварительно ( 'findOne', автоматически). предварительно ( 'найти', автоматически). предварительно ( 'сохранить', autoReduce); module.exports = mongoose.model ( 'Новости', схемы); Тело запроса { "сообщение": "Привет", "имя пользователя": { "_id": "5a736607bee0360014fb28e6", "имя": "Ювентус Флорин" }, "Пользователь": { "_id": "5a736607bee0360014fb28e6", "имя": "Ювентус Флорин"}} Код app.put ( "/ апи / новости", функция (запрос, ответ) {response.header ( "Content -Type», "применение / JSON"); вар полезная нагрузка = request.body, новые новости (полезная нагрузка) .save (функция (ERR) {если (ERR) {response.status (500) Пошлите ({ "сообщение": "Это ошибка!", "ошибка": эээ, "полезная нагрузка": полезная нагрузка});} еще {response.status (200) Пошлите (полезная нагрузка);}});}); После сохранения имеется новая запись, выглядит как (имя пользователя заполняется) { «сообщение»: «Привет»
Flo rian
1

голосов
0

ответ
72

Просмотры

Mongoose дата находки, которая находится внутри массива значений

Скажем, у меня есть модель мангуста, модель имеет поле даты, то есть массив объектов, которые вновь даты для каждого. вар MySchema = новая схема ({CategoryName: {Тип: String}, указывает: [{факторам1: {Тип: Number}, criteria2: {Тип: Number}, pointedDate: {Тип: Дата, по умолчанию: Date.now}}] , createdAt: {Тип: Дата, по умолчанию: Date.now};}) Примечание: поле точек продолжает обновлять. я хочу найти список точек, добавленных в определенном месяце. я знаю сортировать даты createdAt от Как сортировать даты, которые внутри массива. Я упростил свой фактический сценарий, ожидая найти даты результата внутри этого массива. Пожалуйста, помогите, его очень сложно один, т заранее спасибо.
foxenn_pro
1

голосов
1

ответ
863

Просмотры

MongoDB ошибка: требуется опция «Курсор», для совокупности с объяснением аргументом, кроме MongoDB 3.6

MongoDB (версия 3,6) агрегация не работает. Раньше я использовал MongoDB 3.4 и мангуст 4.7.0. Books.aggregate ([{$ спичкой: фильтр}, {$ поиска: {из: "пользователей, localField: 'user_id', foreignField: '_id', как: 'пользователь'}}], функция (эээ, список) {Приведенный выше код работает нормально с MongoDB 3.4. Но после обновления MongoDB до 3,6, агрегация не работает. Он выдает следующее сообщение об ошибке требуется опция «курсор», для совокупности с объяснением аргумента за исключением Из-за многие зависимости я могу «т обновление мангуста также. Так есть ли способ решить эту проблему с мангуста 4.7.0?
Jey Raj
1

голосов
1

ответ
73

Просмотры

Генерация случайного идентификатора по форме экономии мангуста

Так что я в настоящее время имеют форму, прикрепленную к идентификатору пользователя, однако, когда я заполнить форму случайный идентификатор получает генерируемый поэтому форма фактически не привязываясь к идентификатору пользователя так, когда использование восходит к их форме информация не является там, потому что сохраняется в новом идентификатору, а не user.id. Вот некоторые детали коды // формы конкуренции router.get ( '/ панель / пользователи / форма / конкурс-форма /: идентификатор', ensureAuthenticated, (REQ, Рез) => {CompetitionForm.findById (req.params.id, функция (эээ, конкуренция) {res.render ( 'приборная панель / пользователи / форма / конкурс-form.hbs', {PAGETITLE: 'конкурс Форма', конкурсы: конкурс});});}); // детали формы конкуренции размещать router.post ( '/ приборной панели / пользователей / формы / конкурс-формы /: идентификатор', (REQ, Рез) => {CompetitionForm.findOneAndUpdate (req.params.id, req.body, {upsert: истинно}, (эээ, конкуренция) => {если (ERR) {console.log ( `Ошибка сохранения данных: $ {эээ}`); вернуться res.send ( «Ошибка при сохранении данных»); } Res.redirect ( '/ приборная панель'); console.log (req.body); }); }); Идентификатор пользователя здесь 5a7c7815656fa40fb5817630 однако, когда я заполнил форму, идентификатор 5a7c7c4ed8e033da6c40d260 получил генерироваться. Не уверен, что на то, что я делаю неправильно здесь.
B.J.B
1

голосов
2

ответ
526

Просмотры

Мокко зависает после выполнения при подключении Мангуста

Обсуждение дешево, показать мне код Торвальдса Doing тестов интеграции с мокко и Supertest. Вот код //app.js mongoose.Promise = global.Promise; mongoose.connect (config.mongoURL, ошибка => {если (ошибка) {бросок ошибки;} console.log ( 'Подключение к MongoDB');}); modules.export = приложение; // test.js его ( 'возвращает 200', () => {вернуться Supertest (приложение) .get ( '/') ожидают (200).}); В основном то, что происходит в том, что выход «Подключен к MongoDB» журналы после выполнения тестов (у меня есть, как 3 тестов только, никто не использовать дб), а потом мокко там висит, и я должен Ctrl + C. Я, вероятно, пропустил некоторую конфигурацию, но я не могу видеть это. Само собой разумеется, комментируя мангуста линии (mongoose.connect (...)) фиксирует ее. Что мне не хватает?
Christopher Francisco
1

голосов
0

ответ
30

Просмотры

Mongoose Secondary Index is not created

Я пытаюсь сделать нумерованный вторичный индекс для моей схемы / модель, например: 0,1,2, ..., так что я проверил мангуст документы по индексам. они, кажется, есть 2 способа сделать это: «С мангуста, мы определяем эти показатели в нашей схеме на уровне тракта или на уровне схемы» (цитата из документации) .Я пробовал оба этих методов, и кажется, что все работает так же, как и раньше, но там не добавлялись пунктов индекс не добавляются в коллекцию и нет также никаких ошибок. Вот мой код: вар мангуст = требуется ( «мангуст»); вар BlogSchema = новый mongoose.Schema ({название: {Тип: String, требуется: правда, MinLength: 1, отделка: истинное содержание}, {Тип: String, требуемое: истинное, MinLength: 1, отделка: истинно}, _creator : {Тип: mongoose.Schema.Types.ObjectId, требуется: истинно}, _creatorUser: {Тип: String, Требуются: правда, MinLength: 6}, _createdAt: {Тип: Кол-во, необходимо: верно,}}) вар Блог = mongoose.model ( 'Дневник', BlogSchema) Blog.on ( 'индекс', (ERR) => { если (ERR) {console.log (ERR)}}) module.exports = {} Блог; я попытался добавив в структуру схемы: теги: {типа: [строка], индекс: истинно} также попытался добавить это ниже структуру схемы: BlogSchema.index ({имени: 1, тип: -1}), а также пытался использовать и в то же время, ничего не похоже на работу, я проводил часы над этим и просто не могу заставить его работать. Пожалуйста помоги теги: {типа: [String], индекс: истинный} также попытались добавить это ниже структуру схемы: BlogSchema.index ({имени: 1, тип: -1}), а также пытался использовать как в то же время, ничто не похоже на работу , я проводил часы над этим и просто не могу заставить его работать. Пожалуйста помоги теги: {типа: [String], индекс: истинный} также попытались добавить это ниже структуру схемы: BlogSchema.index ({имени: 1, тип: -1}), а также пытался использовать как в то же время, ничто не похоже на работу , я проводил часы над этим и просто не могу заставить его работать. Пожалуйста помоги
Jordan Hury
1

голосов
0

ответ
117

Просмотры

Mongoose MongoDB in Production

У меня действительно странный вопрос, где Mongoose не будет выполнять запросы к коллекциям вне файла определения модели при NODE_ENV = производства, даже при подключении к локальным. дБ / default.js Const мангуст = требуется ( 'мангусты'); module.exports = {подключения (URL) {mongoose.connect (URL); }}; app.js Const дБ = требуется ( './ дБ / по умолчанию'); db.connect (config.get ( 'mongoDB.uri')); User.model.js сопзЬ мангуст = требуется ( 'мангуст'); Const схема = новый mongoose.Schema ({// ...}); Const User = mongoose.model ( 'User', схемы); module.exports = Пользователь; test.js // Этот файл необходим на маршрут сопзЬ пользователя = требуется ( «./ модели / User.model»); User.find ({}) .then (ответ => console.log (ответ)) .catch (ERR => console.log (ERR)); Все это работает абсолютно нормально, когда NODE_ENV = DEV, но как только NODE_ENV = производства, User.find ({}) ... не работает. Никакие ошибки, никакого успеха, он просто не работает. Если я вхожу Пользователь = требуется ( «./ модели / User.model»), это объект Mongoose. Если я бегу User.find ({}) ... код внутри User.model.js файла в то время как в производстве, что также работает. Я совершенно озадаченный, почему это не работает.
Alex McCabe
1

голосов
1

ответ
36

Просмотры

Mongoose find only those who have an entry in another collection

Я пытаюсь найти запись в коллекции с помощью мангуста, но я хочу только записи Wich есть запись в другой коллекции. Чтобы быть более конкретным: У меня есть коллекция 'пост' уаг postSchema = новые Schemas ({postedBy: {Тип: mongoose.Schema.Types.ObjectId, реф: 'User'}, {группа: Тип: mongoose.Schema.Types. ObjectId, ссылка: 'Группа'}, PostContent: String}); коллекция 'группа': вар groupSchema = новые Schemas ({имя: String, создатель: {Тип: mongoose.Schema.Types.ObjectId, ссылка: 'Пользователь'}, Interes: String, общественности: Boolean}); и сборник 'groupMember': вар = groupMemeberSchema новых схем ({группа: {Тип: mongoose.Schema.Types.ObjectId, ссылка: 'Группа'}, пользователь: {Тип: mongoose.Schema.Types.ObjectId, ссылка: ' Пользователь '}});
davdsb
1

голосов
1

ответ
43

Просмотры

Вернуться результат мангуста в функции

Я пытаюсь вернуть результат из моей операции мангуста поиска. Я знаю, что многие вопросы уже просили об этом, но я думаю, что это по-другому. Вот мой пользователь: вар UserSchema = новый mongoose.Schema ({переменная: {Тип: mongoose.Schema.ObjectId, ссылка: 'Variable'}}); Мой пользователь имеет метод для извлечения его переменной. Вот проблема. UserSchema.methods.getVariable = функция () {// TODO? } Я не знаю, как заполнить поле мое, а затем возвращает результат засели ...
Jeremy M.
1

голосов
0

ответ
22

Просмотры

Создание двух объектов, которые ссылаются друг на друга в методе контроллера

У меня есть приложение, которое позволяет пользователям создавать учетную запись. Это все работает отлично, но теперь я хотел бы создать систему, с помощью которой пользователи добавляют к группам и имеют роли области видимости этих групп. Чтение несколько взаимосвязанных вопросов на SO я создал новую групповую схему и создал ссылки между этим и моей схемой пользователя: Моя схема пользователя выглядит следующим образом: сопзЬ UserSchema = новый mongoose.Schema ({электронной почты: {Тип: String, уникально: правда, в нижнем регистре: правда, отделка: правда, проверить: [validator.isEmail, «Неверный адрес электронной почты»], необходимый: «Пожалуйста, укажите адрес электронной почты»}, {имя: тип: String, требуемое: «Пожалуйста, укажите имя», уникальный : правда, отделка: истинно}, группа: {Тип: mongoose.Schema.ObjectId, ссылка: «группы», требуемая: «Вы должны указать группу» })} И моя группа схема выглядит следующим образом: константный GroupSchema = новый mongoose.Schema ({имя: String, пользователей: [{Роль: {Тип: String}, пользователь {Тип: mongoose.Schema.Types.ObjectId, ссылка: 'Пользователь'}}],}); У меня есть промежуточное программное обеспечение, которое регистрирует и проверяет подлинность пользователя, но, по существу значения из регистрационной формы в настоящее время используется для создания нового пользователя: константный пользователя = новый пользователь ({адрес электронной почты: req.body.email, имя: req.body.name }); Я хотел бы, чтобы все пользователи части группы (даже если только группа одного), и что первый человек в группе будет админ (они будут позже иметь возможность добавлять другие в свою группу, управлять ролями пользователей и т.д.) , Я имею в виду, что, когда я создаю пользователя я в то же время создать группу они должны быть частью и добавить их к этому, но я не» знаю, что лучший способ сделать это. Должен ли я иметь некоторое промежуточное программное обеспечение, которое создает группу, а затем создает пользователю проходящее group_id, группы, которая была создана ранее? Кажется, что есть, вероятно, гораздо лучший способ сделать это, но я afriad я не знаю, что это такое. Любая помощь очень ценится.
Stuart Brown
1

голосов
0

ответ
109

Просмотры

Mongoose .save () не работает в очереди заданий

Я использую DAO для вставки документа в базу данных. Эта функция вызывается из контроллера, а также от процессора работы с использованием пакета Bull. дао / user.dao.js: exports.create = функция (данные) {// Создание и сохранение нового константный Пользователь пользователя = новый пользователь (данные); вернуть новый Promise (функция (решительность, отклонять) {user.save (функция (ошибка, данные) {если (ошибка) {отклонять (новый Error (ошибка));} еще {pino.debug ( 'Данные сохраняются в базе данных:' + JSON.stringify (данные)); решимость (данные);}});}); }; user.controller.js: (Это работает ...) exports.create = функция (Req, Рез) {сопз UUID = uuidv4 (); Const userDAO = требуется ( '../ DAOS / user.dao'); userDAO.create ({FullName: req.body.fullName, электронная почта: req.body.email, UUID: UUID}). затем (функция (данные) {// ... Добавить в почтовой очереди и отправить регистрационную ссылку res.send (данные);.}). задвижка (функция (ошибка) {res.status (500) .send (//. .. Отправить ошибки);}); }; пользователей-upload.processor.js: (Это не работает) module.exports = функция (работа, сделано) {job.progress (0); Const Учебное пособие = новый Excel.Workbook (); workbook.xlsx.readFile (path.join (__ имя_директории, '../../uploads/' + job.data.filename)) .then (() => {pino.debug ( "XLSX файл Read.") ;! workbook.eachSheet (функция (таблица, sheetId) {worksheet.eachRow (функция (строка, RowNumber) {если (RowNumber == 1) {pino.debug ( `строка $ {RowNumber} = {$ JSON.stringify (строка .values)} `); Const UUID = uuidv4 (); Const = userDAO требуется ( '../ DAOS / user.dao'); userDAO. создания ({FullName: row.values ​​[1], электронная почта: row.values ​​[2] .text, UUID: UUID}). Затем (функция (данные) {// ... Добавить в очереди почты.}). улов (функция (ошибка) {pino.error (ошибка);}); }}); }); }); pino.debug ( 'Закончена обработка загрузки пользователей ...'); job.progress (99); сделанный(); }; В обоих случаях предварительно сохранить крюк являются bieng увольняют. user.model.js: // ... Schema Definition. userSchema.pre ( 'сохранить', функция (следующий) {сопз unverifiedUser = это; pino.debug ( `Pre-Save Непроверенные пользователя ... $ {JSON.stringify (это)}`); следующий ();}); Вот журналы для события: [2018-02-25T07: 48: 01.383Z] DEBUG (4652 на TEST-PC): Ввод данных Загрузка ... [2018-02-25T07: 48: 01.383Z] DEBUG (4652 на TEST-PC): фрек: непроверенные пользователи-список-1519544881381.xlsx :: FFFF: 127.0.0.1 - POST / API / непроверенные пользователи / загрузить HTTP / 1.1 200 50 - 181.354 мс [2018-02-25T07: 48: 09.544Z] ОТЛАДКА (5864 на TEST-PC): загрузить готовые пользователи обработки ... [2018-02-25T07: 48: 09.613Z] DEBUG (5864 на TEST-PC): XLSX файл Read. [2018-02-25T07: 48: 09.614Z] ОТЛАДКА (5864 на тест-PC): Строка 2 = [NULL, "Кент Кларк", { "текст": "[email protected]", "гиперссылка" : "электронная почта: [email protected]"}, "Учитель"] [2018-02-25T07: 48: 09.615Z] ОТЛАДКА (5864 на тест-PC): Непроверенная Пользователь: { "FULLNAME": "Кларк Кент », "электронная почта": "[email protected]", "UUID": "2f1a3c61-ad1c-443b-a5ad-8578161a5d8b"} [2018-02-25T07: 48: 09.631Z] ОТЛАДКА (5864 на TEST- PC): Pre-Save Непроверенные пользователя ... { "имя" : { "Первый": "Klark", "последний": "Кент"}, "_ идентификатор": "5a926a3936268416e852f1de", "электронная почта": "[email protected]", "UUID": "2f1a3c61-ad1c- 443b-a5ad-8578161a5d8b», "createdAt": "2018-02-25T07: 48: 09.630Z", "updatedAt": "2018-02-25T07: 48: 09.630Z", "FullName": "Klark Kent", «идентификатор»: «5a926a3936268416e852f1de»} Я искал Google и StackOverflow и пробовать различные комбинации и ничего не работает. Если я размещаю код из процессора в контроллер работает отлично. Я не уверен, как поступить. "UUID": "2f1a3c61-ad1c-443b-a5ad-8578161a5d8b", "createdAt": "2018-02-25T07: 48: 09.630Z", "updatedAt": "2018-02-25T07: 48: 09.630Z", «FULLNAME»: «Klark Kent», «идентификатор»: «5a926a3936268416e852f1de»} Я искал Google и StackOverflow и пробовать различные комбинации и ничего не работает. Если я размещаю код из процессора в контроллер работает отлично. Я не уверен, как поступить. "UUID": "2f1a3c61-ad1c-443b-a5ad-8578161a5d8b", "createdAt": "2018-02-25T07: 48: 09.630Z", "updatedAt": "2018-02-25T07: 48: 09.630Z", «FULLNAME»: «Klark Kent», «идентификатор»: «5a926a3936268416e852f1de»} Я искал Google и StackOverflow и пробовать различные комбинации и ничего не работает. Если я размещаю код из процессора в контроллер работает отлично. Я не уверен, как поступить. ве поиска Google и StackOverflow и пробовать различные комбинации и ничего не работает. Если я размещаю код из процессора в контроллер работает отлично. Я не уверен, как поступить. ве поиска Google и StackOverflow и пробовать различные комбинации и ничего не работает. Если я размещаю код из процессора в контроллер работает отлично. Я не уверен, как поступить.
talinpaul86
1

голосов
0

ответ
251

Просмотры

Mongoose Geospatial Query Error: unknown top level operator: $near

With this schema: let mongoose = require("mongoose"); let GeoJSON = require('mongoose-geojson-schema'); let dogSchema = new mongoose.Schema({ //Some code omitted location: { type: mongoose.Schema.Types.Point, coordinates: [Number], }, //Some code omitted }); dogSchema.index({"location": "2dsphere"}); module.exports = mongoose.model("Dog", dogSchema); And this kind of input: { "created" : ISODate("2018-03-04T02:17:58.868Z"), "name" : "Babee", "breed" : "Puddle", "age" : 11, "owner" : ObjectId("5a9b5756a1e44812d109f191"), "location" : { "type" : "Point", "coordinates" : [-118.4912, 34.0195] }, "__v" : 0 } I perform this query: Dog.find({ $near: { $geomentry: { type: "Point", coordinates: [-118.4452, 34.0689], } } }, function (error, result){ //Some code omitted }); With this index: index: '2dsphere' Which produces this error: { MongoError: unknown top level operator: $near at queryCallback (/Users/varun/Desktop/Programing/Woof/node_modules/mongodb-core/lib/cursor.js:223:25) at /Users/varun/Desktop/Programing/Woof/node_modules/mongodb-core/lib/connection/pool.js:541:18 at _combinedTickCallback (internal/process/next_tick.js:131:7) at process._tickCallback (internal/process/next_tick.js:180:9) name: 'MongoError', message: 'unknown top level operator: $near', ok: 0, errmsg: 'unknown top level operator: $near', code: 2, codeName: 'BadValue' } How do I fix this error? UPDATE: It appears I had an an error with indices being dropped Link
tot89
1

голосов
1

ответ
408

Просмотры

Mongoose сохранить () не возвращает обещание

Документации Mongoose в подтверждает, что метод возвращает сохранить обещание. Я хотел бы сохранить модель пользователя в моей базе данных, используя этот метод. Я делаю это так: сохранить (пользователь) {user.save ((эээ, пользователь) => {если (ERR) {вернуться HandleError (ERR);} еще {console.log ( 'Пользователь' + user.screenName + 'был добавлен.');} this.db.close ();}); } Обратите внимание, что пользователь является пары: mongoose.model ( 'Пользователь', this.userSchema); Я не понимаю, почему console.log ниже возвращает ложное: console.log ((userRepository.save (пользователь) InstanceOf Promise)); И, конечно, когда я пытаюсь то () обещание я не работаю. Я что-то пропустил ? Я также попытался вернуть user.save (...), но она по-прежнему не работает. Спасибо за чтение моего сообщения и иметь хороший день!
1

голосов
1

ответ
133

Просмотры

Могу ли я удалить одно поле из MongoDB документа через некоторое время?

У меня есть пользовательский мангуста схемы, как сильфона сопзЬ userSchema = новый mongoose.Schema ({Логин: {Тип: String}, адрес электронной почты: {Тип: String}, пароль: {Тип: String}, маркеры: [{доступа: {Тип: String }, маркер: {Тип: String}}],}); Я хочу удалить одного маркерного объекта, по прошествии некоторого времени, например, 30-х годов. Если добавить createAt поле с истекает лексем свойств: [{доступа: {Тип: String, требуется: правда,}, маркер: {Тип: String, требуется: правда,}, createdAt: {Тип: Дата, по умолчанию: Date.now , истекает: 10}}], Тогда результат: все документ удаляется. Есть ли способ сделать то, что я хочу?
R3tter
1

голосов
1

ответ
125

Просмотры

Санируйте пользователь входы перед сохранением или дезинфицировать вход после извлечения из базы данных?

Я хочу, чтобы сохранить пользователь входа в мою базу данных, но я не уверен, если я должен дезинфицировать ввода пользователя перед сохранением в базу данных или после того, как я могу получить их из базы данных и отображать их в HTML? Как здесь (перед сохранением): вар тема = htmlencode.htmlEncode (req.body.topic); вар topiccontent = req.body.topiccontent; вар г = markdown.toHTML (topiccontent); вар бесконечно убирать = sanitizeHtml (г, {allowedTags: [ 'B', 'я', 'ет', 'сильный', 'A', 'h1', 'h2', 'h3', 'H4', H5 ' , 'h6', 'IMG', 'BLOCKQUOTE', 'код', 'ш'], allowedAttributes: { 'а': [ 'HREF', 'альт', 'название'], 'IMG': [ 'ЦСИ », 'Alt', 'название']}, allowedIframeHostnames: []}); вар opentopic = новые темы ({тема: тема, topiccontent: topiccontent, writerid: req.session.id, tür: tür, begeni: 0, writernick: req.session.nick}); А (санировать входы из базы данных) здесь: topics.findOne ({тема: req.query.w}, функция (ERR, тема) {уаг тему = htmlencode.htmlEncode (topic.topic); вар topiccontent = topic.topiccontent; вар у = markdown.toHTML (topiccontent); вар чистые = sanitizeHtml (Y, {allowedTags: [ 'B', 'я', 'ет', 'сильный', 'а', 'h1', 'h2', 'h3 », 'h4', 'h5', 'h6', 'IMG', 'BLOCKQUOTE', 'код', 'ш'], allowedAttributes: { 'а': [ 'HREF', 'альт', 'название' ], 'IMG': [ 'SRC', 'Alt', 'название']}, allowedIframeHostnames: []}); res.render ( './ шоу', {тема: тема, topiccontent: topiccontent .... })}) tür, begeni: 0, writernick: req.session.nick}); А (санировать входы из базы данных) здесь: topics.findOne ({тема: req.query.w}, функция (ERR, тема) {уаг тему = htmlencode.htmlEncode (topic.topic); вар topiccontent = topic.topiccontent; вар у = markdown.toHTML (topiccontent); вар чистые = sanitizeHtml (Y, {allowedTags: [ 'B', 'я', 'ет', 'сильный', 'а', 'h1', 'h2', 'h3 », 'h4', 'h5', 'h6', 'IMG', 'BLOCKQUOTE', 'код', 'ш'], allowedAttributes: { 'а': [ 'HREF', 'альт', 'название' ], 'IMG': [ 'SRC', 'Alt', 'название']}, allowedIframeHostnames: []}); res.render ( './ шоу', {тема: тема, topiccontent: topiccontent .... })}) tür, begeni: 0, writernick: req.session.nick}); А (санировать входы из базы данных) здесь: topics.findOne ({тема: req.query.w}, функция (ERR, тема) {уаг тему = htmlencode.htmlEncode (topic.topic); вар topiccontent = topic.topiccontent; вар у = markdown.toHTML (topiccontent); вар чистые = sanitizeHtml (Y, {allowedTags: [ 'B', 'я', 'ет', 'сильный', 'а', 'h1', 'h2', 'h3 », 'h4', 'h5', 'h6', 'IMG', 'BLOCKQUOTE', 'код', 'ш'], allowedAttributes: { 'а': [ 'HREF', 'альт', 'название' ], 'IMG': [ 'SRC', 'Alt', 'название']}, allowedIframeHostnames: []}); res.render ( './ шоу', {тема: тема, topiccontent: topiccontent .... })}) вар topiccontent = topic.topiccontent; вар у = markdown.toHTML (topiccontent); вар бесконечно убирать = sanitizeHtml (у, {allowedTags: [ 'б', 'я', 'их', 'сильный', 'а', 'h1', 'h2', 'h3', 'h4', 'H5' , 'h6', 'IMG', 'BLOCKQUOTE', 'код', 'ш'], allowedAttributes: { 'а': [ 'HREF', 'альт', 'название'], 'IMG': [ 'ЦСИ », 'Alt', 'название']}, allowedIframeHostnames: []}); res.render ( './ шоу', {тема: тема, topiccontent: topiccontent ....})}) вар topiccontent = topic.topiccontent; вар у = markdown.toHTML (topiccontent); вар бесконечно убирать = sanitizeHtml (у, {allowedTags: [ 'б', 'я', 'их', 'сильный', 'а', 'h1', 'h2', 'h3', 'h4', 'H5' , 'h6', 'IMG', 'BLOCKQUOTE', 'код', 'ш'], allowedAttributes: { 'а': [ 'HREF', 'альт', 'название'], 'IMG': [ 'ЦСИ », 'Alt', 'название']}, allowedIframeHostnames: []}); res.render ( './ шоу', {тема: тема, topiccontent: topiccontent ....})}) h6' , 'IMG', 'BLOCKQUOTE', 'код', 'ш'], allowedAttributes: { 'а': [ 'HREF', 'альт', 'название'], 'IMG': [ 'SRC', 'альт', 'название']}, allowedIframeHostnames: []}); res.render ( './ шоу', {тема: тема, topiccontent: topiccontent ....})}) h6' , 'IMG', 'BLOCKQUOTE', 'код', 'ш'], allowedAttributes: { 'а': [ 'HREF', 'альт', 'название'], 'IMG': [ 'SRC', 'альт', 'название']}, allowedIframeHostnames: []}); res.render ( './ шоу', {тема: тема, topiccontent: topiccontent ....})})
ŞükSefHam
1

голосов
0

ответ
27

Просмотры

как я могу получить эти данные в маршрутизатор из HTML

Im пытается отправить Получить данные из HTML. Я хочу, чтобы представить данные входа на мой маршрутизатор, чтобы вернуть что-то. Мой код просто от: и мой маршрутизатор router.get ( "/ поиск" (REQ, Рез) => {gameName.find ({GameName: req.body.search}) .then ((gamesInfo) => { /// res.send ( 'ID:' + req.query.id); res.render ( "поиск", {gamesInfo: gamesInfo}); // console.log (gamesInfo) возвращение;}) .catch (( ERR) => {console.log ( "эээ эээ Errrr"); console.log (ERR); res.send (ERR);});});
Adrian Marica
1

голосов
0

ответ
48

Просмотры

Попытка отправить метод GET из HTML в базу данных

В течение трех дней я пытался отправить метод GET из HTML в свою базу данных и получить результат (данные списка по имени). Это флэш-игра на сайте. После того, как я представить данные, которые он отображает страницу без данных. Я пытаюсь получить данные и список игр от данных. Я не знаю, что это проблема. Возможно, я смотрю на каждый документы и учебники половина из них не работаю половину из них я не понял (я новичок) :-) Я буду рад, если кто-то может мне помочь. Вот мой HTML, включая мой метод GET: `{%> `Вот мой маршрутизатор Const экспресс = требуется ( "экспресс"), bodyParser = требуется ( "тело-анализатор"), приложение = экспресс (); Маршрутизатор = express.Router (); вар GameName = требуется ( "../ модели / inputGame"); router.get ( "/ Oyun /: gameNameId", (REQ, разреш) => {gameName.findById (req.params.gameNameId) .then ((gamesInfo) => {res.render ( "showGame", {gamesInfo: gamesInfo}); }) .Catch ((ERR) => {console.log ( "эээ эээ Errrr"); console.log (ERR); res.send (ERR);}); }); ////////////////// router.get ( "/: gameCategorie", (REQ, разреш) => {gameName.find ({gameCategorie: req.params.gameCategorie}) .then ((gamesInfo) => {res.render ( "категория / beceri", {gamesInfo: gamesInfo}); возвращение;}) .catch ((ERR) => {console.log ( "эээ эээ Errrr"); console.log (ERR); res.send (ERR);});}); ////////////////////////// Здесь Поиск получить маршрутизатор /////////////////// ////// router.get ( "/ поиск" (REQ, Рез) => {gameName.find ({GameName: req.query.search}, функция (эээ, gamesInfo) {если (ERR) {консоль .log (ERR);} еще {res.send ( "элемент сохраняется в базе данных"); res.render ( "категория / beceri", {gamesInfo: gamesInfo});}});}); module.exports = маршрутизатор; моя res.render страница (пытаясь список результаты моего поиска) {%> мой мангуст схема Const = выразить требует ( "экспресс"), маршрутизатор = express.Router (), мангуст = требуется ( "Мангуст"); вар GameName = mongoose.Schema ({GameName: {Тип: String, требуется: "BOS birakma"}, gameCategorie: {Тип: String, требуется: "BOS birakma"}, gameImg: {Тип: String, требуется: "BOS birakma "}, gamePath: {Тип: String, требуется:" BOS birakma "}, gameTags: {Тип: String, требуется:" BOS birakma "}, редактор: {Тип: String, требуется:" BOS birakma "}, }); module.exports = mongoose.model ( "GameName", GameName); моя база данных JSON [{ "_id": "5aaf99c981db2e1d38c84fb8", "GameName": "Pac Man", "gameCategorie": "аркада", "gameImg": «https://image.ibb.co/f5h4AH/4.jpg », "gamePath": "Yok", "gameTags": "Arkade", "редактор": "SOMETEXT", "__v": 0}, { "_id": "5aaf9a7281db2e1d38c84fb9", "GameName": "SuperMario", "gameCategorie": "йок", "gameImg": "https://image.ibb.co/c9nRPc/11.jpg", "gamePath": "йок", "gameTags": "Yok", "Редактор": "Merhaba", "__v": 0}, { "_id": "
Adrian Marica
1

голосов
0

ответ
91

Просмотры

Команда MongoDB updateMany в сценарии узла не требует Exec (), как другие

У меня есть доступ к нескольким DBS в моем коде, для некоторых мы используем «мангуст»: «4.11.7», но для того, о котором идет речь, давайте назовем его dbOne, мы используем «мангуст»: «4.6.1». Недавно мне нужно было написать сценарий узла, чтобы обновить коллекцию на dbOne, и сделать так, что я написал команду, как в следующем: примере 1 попытку {ждет data.dbOne.CollectionOne.update ({}, {$ сняты с охраной: { " attributeOne ": ""}}, {несколько: истинно}) Exec ();. } Поймать (е) {console.log (е); } Это работало отлично, так что я пошел дальше. Тем не менее, я теперь должен обновить еще одну коллекцию в том же дб, давайте назовем это CollectionTwo и по какой-то причине подобная команда, как и выше НЕ РАБОТАЕТ! Т.е. примера 2 попытки {ждет data.dbOne.CollectionTwo.update ({}, {$ незаданы: { "attributeOne": "
thehme
1

голосов
2

ответ
902

Просмотры

платформа загрузки изображений с использованием узлов Js, мангуста и multer

Я отчаянно пытаюсь построить галерею изображений в узле-JS, где я могу: 1. использовать форму, чтобы загрузить изображение из Жёсткого 2. сохранить загруженный файл в Монго-DB (мангуста) 3. Получить загруженные изображения и показать на моем сайте, я совсем новичок в узел, а также MongoDB, так что у меня действительно трудное время, делая это (делает то же самое для просто новости / только текст DB-схем было так легко). Я искал все подобные темы раньше, но ни один из них не помог мне, так что я действительно отчаянным сейчас, так как я должен был скопировать некоторые кодовые части, которые я не понимаю на пути к ее решению. Пожалуйста, помогите мне с некоторыми начинающими объяснений! Мой HTML-формы Выберите изображение Нет файлы в данный момент выбраны для загрузки изображений Описания отправить Мой DB-схему: пусть imageSchema = новый mongoose.Schema ({IMG: {данные: Буфер, CONTENTTYPE: String} Описание: String}); module.exports = mongoose.model ( "Изображение", imageSchema); // Экспорт моей схемы Мой файл маршрута: пусть экспресс = требуется ( «экспресс»); пусть мангуст = требуется ( «мангуст»); пусть bodyParser = требуется ( "тело-анализатор"); пусть маршрутизатор = express.Router ({mergeParams: истинно}); пусть multer = требуется ( "multer"); пусть Image = требуется ( "../ модели / изображения"); // Использование DB-схемы, которые я экспортированной Const = GridFsStorage требуется ( 'multer-gridfs-хранилище'); Const хранения = новый GridFsStorage ({URL: "MongoDB: // локальный / my_db", файл: (REQ, файл) => {возвращение {имя файла: 'file_' + Date.now ()};}}); Const загрузки = multer ({хранения}); Const sUpload = upload.single ( 'изображения'); router.post ( '/', sUpload, (REQ, разреш, следующий) => {console.log ( "имя_файла" + req.file.filename); console.log ( "CHUNKSIZE:" + req.file.chunkSize ); console.log ( "CONTENTTYPE:" + req.file.contentType); Image.create (req.file, функция (ERR, addedImage) {если (ERR) {console.log (ERR);} еще {консоли. журнал ( "Добавлен НОВЫЙ ИМИДЖ!" + addedImage); res.redirect ( "/ изображения");}})}); module.exports = маршрутизатор; Сейчас, Что мне нужно сделать, чтобы получить фактический файл для его получения? Когда я загружаю мой HTML-форму и загрузить изображение, после нажатия представить, я получаю следующие console.logs: FILENAME: file_1522841638818 CHUNKSIZE: 261120 CONTENTTYPE: изображение / PNG PATH: не определено ADDED NEW IMAGE УСПЕШНО! {_Id: 5ac4b82674d2091a8db36f2f, __v: 0} Когда я иду в БД «my_db» и посмотрите на db.images.find () изображение не загружено. Поэтому мне нужно знать 1. Как загрузить его в мою БД? 2. Как извлечь его и реально использовать сам файл, чтобы показать его в HTML? Спасибо большое! Btw .: Я реализовал всю эту multer-gridfs-хранение вещь, потому что я красный, что вы не можете загрузить изображения> 16 МБ без него. Я думаю, что я на самом деле не используя multer еще так может быть, вы можете дать мне несколько советов о том, как я могу получить к файлу изображения. Я знаю, вы могли бы говорить о каком-то доку конкретных пакетов, которые я реализовал. Поверьте мне, это только одна попытка около 100 различных попыток приблизиться к этому, и я очень смущен теперь, что важно для меня: - /
Aenima22
1

голосов
0

ответ
28

Просмотры

Mongoose ошибка соединения: в чем разница между таймаут и сокет закрыт? и когда доза либо из них происходит?

Недавно один из извлекаемых интерфейсов в моей производственной среде потратила много времени, чтобы получить ответ или нет ответа. Я использую nodejs и MongoDB. Зависимости проекта показан удар: "зависимость": { "экспресс": "2.5.10", "Iconv-ЛАЙТ": "^ 0.4.13", "ioredis": "^ 1.15.1", "log4js": " ^ 0.6.35" , "мангуст": "^ 4.4.13", "узел-график": "~ 1.0.0", "узел-XLSX": "^ 0.4.0", "SuperAgent": «3,8. 2" }, когда я проверил журнал, он сказал производственной среде я думаю, что эта ошибка была вызвана чем-то не так с сетью, поэтому установка I подобная тестовая среда, чтобы иметь ошибки повторялись. Я использую WRK для отправки запросов на некоторое время, во время этого я поставил IPTables, чтобы смоделировать ситуацию, что-то не так с сетью. Тем не менее, я получаю другую ошибку. Тестовая среда, поэтому мои вопросы: 1. В чем разница между таймаут и сокет закрыт? 2. Когда доза либо из них происходит?
X.Zhang
1

голосов
1

ответ
346

Просмотры

Как интегрировать Коа, паспорт и MongoDB?

* Пожалуйста, не игнорируйте вопрос, глядя на его длину. Это может показаться долго, потому что я приложил код. Фактическая постановка задачи действительно мало. Я попытался интегрировать паспорта, Коа & MongoDB из последних двух дней. Я терпела неудачу, и я не в состоянии получить какие-либо ссылки о проблеме я лицом. Моя главная задача, чтобы просто получить модуль Войти работу. Моя проблема заключается в том, что функция для обработки после запроса для входа в моем индексе маршрутах, связанных с коа паспортом вызываются и ctx.body также посылаются в ответ, но successRedirect и failureRedirect не работают. Внизу находятся файлы, которые я использую. В auth.js, у меня есть консольный вход пользователя внутри нового LocalStrategy, сразу после того пользователя вар = строки. Ничто не записывается в консоль. auth.js Const паспорт = требуется (» использовать (преобразование (сессия ({магазин: новый MongoStore ()}))) // тело анализатор Const bodyparser = требуется ( 'КоА-bodyparser') app.use (bodyparser ({enableTypes: [ 'JSON', 'форма', 'текст']})) // паспорт требуется ( './ авт ') Const паспорт = требуется (' КоА-паспорт') app.use (passport.initialize)) app.use (passport.session)) приложение (( .use (index.routes (), index.allowedMethods (), users.prefix ( '/ индекс')) app.use ((СТЙ, следующий) => {если (ctx.isAuthenticated ()) {вернуться в следующем () } еще {ctx.redirect ( '/')}}) app.use ((CTX, следующий) => {вернуться в следующий () улов (функция (ERR) {ctx.status = err.status || 500;., если (err.expose) {ctx.body = err.message;}})}) = module.exports приложение я не могу вывести что-нибудь из здесь. Я'
psvs
1

голосов
0

ответ
169

Просмотры

Trouble understanding my errors when trying to create my MongoDB database connection on my javascript server using node.js

I am currently taking a web course and am almost always struggling to debug my code and the errors Node returns don't seem to help. I am creating a web server and trying to create username and password authentication with MongoDB and JavaScript. When I call my initialize function I get a wack load of errors. I know it is coming from my Database initialization function because when I take it out of my initial server initialization I get no errors. For the most part this code comes from my specific assignment design document so I am not looking for anything that's more efficient etc. Working Code without MongoDB function: data.initialize().then(function(){ app.listen(HTTP_PORT, function(){ console.log("app listening on: " + HTTP_PORT) }); }).catch(function(err){ console.log("unable to start server: " + err); }); Code that isn't working: data.initialize().then(dataServiceAuth.initialize).then(function(){ app.listen(HTTP_PORT, function(){ console.log("app listening on: " + HTTP_PORT) }); }).catch(function(err){ console.log("unable to start server: " + err); }); DataServiceAuth.initialize: var mongoose = require("mongoose"); var Schema = mongoose.Schema; var userSchema = new Schema({ "userName": { unique: true, type: String }, "password": String, "email": String, "loginHistory": [{ "dateTime": Date, "userAgent": String }] }); let User; //to be defined on new connection module.exports.initialize = function () { return new Promise(function (resolve, reject) { let db = mongoose.createConnection("mongodb://:@ds017193.mlab.com:17193/web322_a6"); db.on('error', (err) => { reject(err); // reject the promise with the provided error }); db.once('open', () => { User = db.model("users", userSchema); resolve(); }); }); }; and last but not least all the errors (node:6968) UnhandledPromiseRejectionWarning: Error: Username contains an illegal unescaped character at parseConnectionString (C:\Users\Jasper\Desktop\School\web322\WEB322-A5-solution\node_modules\mongodb\lib\url_parser.js:280:11) at parseHandler (C:\Users\Jasper\Desktop\School\web322\WEB322-A5-solution\node_modules\mongodb\lib\url_parser.js:119:14) at module.exports (C:\Users\Jasper\Desktop\School\web322\WEB322-A5-solution\node_modules\mongodb\lib\url_parser.js:25:12) at connect (C:\Users\Jasper\Desktop\School\web322\WEB322-A5-solution\node_modules\mongodb\lib\mongo_client.js:874:3) at connectOp (C:\Users\Jasper\Desktop\School\web322\WEB322-A5-solution\node_modules\mongodb\lib\mongo_client.js:269:3) at executeOperation (C:\Users\Jasper\Desktop\School\web322\WEB322-A5-solution\node_modules\mongodb\lib\utils.js:419:24) at MongoClient.connect (C:\Users\Jasper\Desktop\School\web322\WEB322-A5-solution\node_modules\mongodb\lib\mongo_client.js:260:10) at Promise (C:\Users\Jasper\Desktop\School\web322\WEB322-A5-solution\node_modules\mongoose\lib\connection.js:427:12) at new Promise () at NativeConnection.Connection.openUri (C:\Users\Jasper\Desktop\School\web322\WEB322-A5-solution\node_modules\mongoose\lib\connection.js:424:19) at Mongoose.createConnection (C:\Users\Jasper\Desktop\School\web322\WEB322-A5-solution\node_modules\mongoose\lib\index.js:167:17) at C:\Users\Jasper\Desktop\School\web322\WEB322-A5-solution\data-service-auth.js:18:27 at new Promise () at module.exports.initialize (C:\Users\Jasper\Desktop\School\web322\WEB322-A5-solution\data-service-auth.js:17:12) at (node:6968) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1) (node:6968) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Jasper French
1

голосов
0

ответ
151

Просмотры

$sum in mongodb sums decimals, the result is an integer, the number behind the decimal point is forcibly removed, solve?

The data in the database is like this, there are decimals, I need to sum. the data: [ { _id: 5ad16497f52e0e1160fb70ae, state: 0, percentage: 32, serviceCharge: 1 }, { _id: 5ad16600f52e0e1160fb70b1, state: 0, percentage: 0, serviceCharge: 10.115384615384642 }, { _id: 5ad167f6c782521402300b4a, state: 0, percentage: 0, serviceCharge: 16.11538461538464 }, { _id: 5ad167f9c782521402300b4c, state: 0, percentage: 0, serviceCharge: 23.769230769230717 }, { _id: 5ad49154eb7bc9401e0c469b, state: 0, percentage: 6, serviceCharge: 6 }, { _id: 5ad49154eb7bc9401e0c469c, state: 2, percentage: 0, serviceCharge: 6 } ] the code : bet.aggregate( { $match: { state: { $in: [0, 1, 2, 3] } } }, { $group: { _id: { state: "$state" }, serviceCharge: { $sum: "$serviceCharge" }, percentage: { $sum: "$percentage" }, income:{ $sum: { $subtract: [ "$serviceCharge","$percentage"] } } }, }, { $project: { "_id": 0, "state": "$_id.state", "serviceCharge": 1, "percentage": 1 ,"income":1} }, (err, ret) => { console.log(ret) }) Run, and the result is : [ { serviceCharge: 6, percentage: 0, income: 6, state: 2 }, { serviceCharge: 57, percentage: 38, income: 19, state: 0 } ] Where is my Decimals, and Why is the result of the calculation an integer?
M.Fu
1

голосов
1

ответ
52

Просмотры

Mongoose - Can not create db after Node.js server restart

Я поддерживаю приложение Node.js-MongoDB. Я не являюсь автором кода и теперь пытаюсь понять. Моя проблема заключается в том, что, как мой код использует Mongoose для операций с базой данных. Существует модель папки в папку приложения. В этой папке есть все необходимый объект files.For например feedback.js, user.js и т.д. Пример содержание Feedback.js подобно; вар репозиторий = требуется ( './ основание / Repository'); Подключение вар = требуется ( './ основание / Connection'); вар = Repository.schema SCM ({идентификатор пользователя: Строка, текст: Строка, дата: Кол-во}); scm.index ({дата: 1}); scm.index ({идентификатор пользователя: 1}); вар репо = Repository.create ( 'Обратная связь', SCM, соединение); module.exports = новый репо (); Пример содержания Connection.js файла под базовую папкой вар мангусты = требуется ( «мангусты»); вар дб = mongoose.createConnection ( 'MongoDB: // локальный: 27017 / MyDB '); вар getDb = функция () {возвращение дБ; }; module.exports = { 'getDb': getDb}; Теперь, когда я запустить приложение узла, то он автоматически создавать базы данных, если они не exists.There никаких проблем, пока здесь. Проблема начинается тогда, когда я пытаюсь создать новый database.I пытался создать новую базу данных. Таким образом, я создал файл соединения, как в данном примере. Затем я создал объектный файл в папке модели, как в примере. Но когда я перезагрузить приложение узла (перезагрузка PM2 ....) моя база данных не создается. Есть файл, который говорит Мангуст «Создать этот databaes.» Я не мог подать любой файл конфигурации в папке приложения. В чем моя проблема? Спасибо автоматически создавать базы данных, если они не exists.There это не проблема, пока здесь. Проблема начинается тогда, когда я пытаюсь создать новый database.I пытался создать новую базу данных. Таким образом, я создал файл соединения, как в данном примере. Затем я создал объектный файл в папке модели, как в примере. Но когда я перезагрузить приложение узла (перезагрузка PM2 ....) моя база данных не создается. Есть файл, который говорит Мангуст «Создать этот databaes.» Я не мог подать любой файл конфигурации в папке приложения. В чем моя проблема? Спасибо автоматически создавать базы данных, если они не exists.There это не проблема, пока здесь. Проблема начинается тогда, когда я пытаюсь создать новый database.I пытался создать новую базу данных. Таким образом, я создал файл соединения, как в данном примере. Затем я создал объектный файл в папке модели, как в примере. Но когда я перезагрузить приложение узла (перезагрузка PM2 ....) моя база данных не создается. Есть файл, который говорит Мангуст «Создать этот databaes.» Я не мог подать любой файл конфигурации в папке приложения. В чем моя проблема? Спасибо Затем я создал объектный файл в папке модели, как в примере. Но когда я перезагрузить приложение узла (перезагрузка PM2 ....) моя база данных не создается. Есть файл, который говорит Мангуст «Создать этот databaes.» Я не мог подать любой файл конфигурации в папке приложения. В чем моя проблема? Спасибо Затем я создал объектный файл в папке модели, как в примере. Но когда я перезагрузить приложение узла (перезагрузка PM2 ....) моя база данных не создается. Есть файл, который говорит Мангуст «Создать этот databaes.» Я не мог подать любой файл конфигурации в папке приложения. В чем моя проблема? Спасибо
mhendek
1

голосов
0

ответ
230

Просмотры

MongoDB и Cosmos DB ключей Ошибка

Я пытаюсь создать свое первое приложение MongoDB с экспресс и угловой & Azure Космос БД. Вот мои JS файлы: hero.model.js константные мангуст = требуется ( «мангуст»); Схема Const = mongoose.Schema; Const heroSchema = новая схема ({идентификатор: {Тип: Number, требуется: правда, уникальный: истинный}, имя: String}, {Коллекция: 'Герои'}) Const Hero = mongoose.model ( 'Hero', heroSchema); module.exports = герой; mongo.js Const мангуст = требуется ( 'мангусты'); mongoose.Promise = global.Promise; Const Env = требуется ( './ окр / окружающая среда'); Const mongoUri = MongoDB: `$ {env.accountName}: $ {} env.key}@${env.accountName .documents.azure.com: 10255 / = true` SSL функция подключения () {mongoose.set (» отладки», правда); вернуться мангуста. Connect (mongoUri)} = {module.exports Connect, мангуст}; index.js Const = выразить требуется ( 'экспресс'); Const bodyParser = требуется ( 'тело-анализатор'); Const = путь требует ( 'путь'); константные маршруты = требуется (»./ маршрутов); Const корень = './'; Const порт = process.env.PORT || '3000'; Const приложение = экспресс (); app.use (bodyParser.json ()); app.use (bodyParser.urlencoded ({продлен ложь})); app.use (express.static (path.join (корневые, 'Документы'))); app.use ( '/ API', маршруты); app.get ( '*', (REQ, разреш) => {res.sendFile ( 'документы / index.html', {корень});}); route.js Const = выразить требуется ( 'экспресс'); Const маршрутизатор = express.Router (); Const heroService = требуется ( './ hero.service'); router.get (» / героев, (REQ, разреш) => {heroService.getHeroes (REQ, разреш); }); router.post ( '/ герой', (REQ, разреш) => {heroService.postHero (REQ, разреш);}); router.put ( '/ герой /: идентификатор', (REQ, разреш) => {heroService.putHero (REQ, разреш);}); router.delete ( '/ герой /: идентификатор', (REQ, разреш) => {heroService.deleteHero (REQ, разреш);}); module.exports = маршрутизатор; app.listen (порт, () => console.log ( `API, работающие на локальном хосте: $ {порт}`)); hero.service.js Const героя = требуется ( './ hero.model'); требовать ( './ Монго') подключения (). Функция getHeroes (REQ, Рез) {Const docquery = Hero.find ({}); docquery .exec () .then (герои => {res.status (200) .json (героев);}) .catch (ошибка => {res.status (500) Пошлите (ошибка); возвращение;}); } Функция postHero (REQ, разреш) {Const originalHero = {ID: req.body.id, имя: req.body.name}; Const герой = новый герой (originalHero); hero.save (ошибка => {если (checkServerError (Рез, ошибка)) возвращение; res.status (201) .json (герой); console.log ( 'Hero успешно создан!');}); } Функция checkServerError (Рез, ошибка) {если (ошибка) {res.status (500) Пошлите (ошибка); вернуть ошибку; }} Функция putHero (REQ, разреш) {Const originalHero = {ID: ParseInt (req.params.id, 10), имя: req.body.name}; Hero.findOne ({ID: originalHero.id}! (Ошибка, герой) => {если (checkServerError (Рез, ошибка)) возвращение; если (checkFound (Рез, герой)) возвращение; hero.name = originalHero.name ; hero.save (ошибка => {если (checkServerError (Рез, ошибка)) возвращение; res.status (200) .json (герой); console.log ( 'Hero успешно обновлен!'); }); }); } Функция deleteHero (REQ, разреш) {Const ID = ParseInt (req.params.id, 10); Hero.findOneAndRemove ({: ID})! .Then (герой => {если (checkFound (Рез, герой)) возвращение; res.status (200) .json (герой); console.log ( 'Hero успешно удален! «);}) .catch (ошибка => {если (checkServerError (Рез, ошибка)) возвращение;}); } Функция checkFound (Рез, герой) {если (герой!) {Res.status (404) Пошлите ( 'Герой не найден.'); вернуть; } Возвращение героя; } module.exports = {getHeroes, postHero, putHero, deleteHero}; Он работает только тогда, когда я отправляю новый герой в первый раз, и второй раз дает мне сообщение об ошибке: E11000 дубликат ключей ошибки: admin.Heroes Ошибка _ID или уникальный ключ ограничений. Пожалуйста помоги!! Благодарю.
2

голосов
1

ответ
15

Просмотры

Сравнение дат в Mongoose Doc и Экспресс текущей даты

Я найти пользователя, который отправляет запрос на POST, а затем выяснить, если у них есть документ, в одной и той же схеме, которую они пытаются представить. Если у них есть несколько, сортировать и возвращает самое последнее. Я хотел бы сравнить текущую дату с датой, найденной в мангустах документа, чтобы увидеть, если они сделали то же самое действие в течение последних 30 дней, и если это так мешают им делать указанное действие. Пытались несколько поисковых Google идеи решения / StackOverflow / Reddit, но я не получаю то, что я хочу. Внутри запроса POST моего в Экспрессе пусть CurrentDate = новый Date (); console.log (CurrentDate); User.findOne ({пользователь: req.user.id}) .then (пользователь => {Scores.find () сортировки ({дата:.. -1}) предел (1) .select ( 'дата') .then (дата => {если (CurrentDate - дата
Buckyx55

Просмотр дополнительных вопросов