Arhn - архитектура программирования

mongoose: невозможно аннулировать вложенный документ, который не был добавлен в массив

Когда я пытаюсь добавить местоположение в модель компании, я получаю сообщение Невозможно сделать недействительным вложенный документ, который не был добавлен в массив.

Моя схема выглядит так:

var companySchema = new Schema({
    name: String,
    description: String,
    locations: [{
        address: String,
        loc: {
            type: [Number],
            index: '2d'
        }
    }],
});

Обновление, которое выполняет добавление местоположения

// I am very unsure if I can creata a location this way
var newLocation = 
{
    address: address,
    loc:
    {
        type: [long, lat]
    }
};

CompanyModel.findByIdAndUpdate(
    company_id, 
    { $push: { locations: newLocation } }, 
    {new: true},
    function(err, updatedCompany) {
        if(err) throw err;

        if(!updatedCompany)
        {
            res.sendError({
                error: 'INVALID_COMPANY_ID'
            });
        }
        else
        {
            res.sendSuccess({
                data:
                {
                    company: updatedCompany
                }
            });
        }
});

Вы знаете, почему я получаю эту ошибку? Я не получаю трассировку стека.

14.08.2015

  • В качестве дополнения к вашей реальной проблеме здесь я бы посоветовал вам отказаться от идеи хранения данных геолокации в массиве вложенных документов. Проблема в том, что хотя MongoDB может найти ближайший документ с геопространственными данными в массиве, она не может исключить элементы массива, которые не находятся рядом с запрошенным местоположением (или $geoWithin сами по себе, если уж на то пошло). Например, в массиве хранятся данные о местоположении Нью-Йорка и Токио. Запрос сделан для Нью-Джерси, и это недалеко от Нью-Йорка, но не в Токио. Но полный документ ретутнут. Нет пути вокруг этого. 14.08.2015
  • На ваш вопрос. Ваш вар неверен. Должно быть { address: address, loc:[long, lat] }; Поскольку тип — это определение схемы мангуста, а не структура самого документа. 14.08.2015
  • Привет Спасибо за ответ. Если у вас есть время, не могли бы вы подробнее объяснить, почему это плохо? Я понимаю это так: У компании 2 офиса. Один в Нью-Йорке и один в Токио. Когда я хочу, чтобы все компании были рядом с пользователем, который живет в Нью-Йорке, я не могу исключить из результата токийский офис? 14.08.2015
  • Лучшее, что вы можете сделать, это соответствовать только Нью-Йорку. Если бы Лонг-Айленд был там, то это было бы проигнорировано. Для этого метода требуется $geoNear конвейер агрегации и, в частности, другие методы агрегации. Но это вопрос, отличный от того, что вы задали. На этот вопрос отвечает мой предыдущий комментарий. Вы объявили объект, который хотели $push неправильно, так как это не соответствует схеме. Это ваша ошибка. И не совсем справочный пункт помощи, следовательно, не ответ. 14.08.2015
  • Doodlemeat, не могли бы вы добавить ниже ответ, в котором резюмируется решение Blakes Seven? Я не знаю, может ли это быть полезно для будущих читателей? 17.01.2016
  • Возможный дубликат Mongo и Node .js: Поиск документа по _id с использованием UUID (GUID) 14.09.2017

Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..