Sails 0.10 и ассоциация «многие ко многим» — получение всех связанных данных, а не только первых

У меня есть 2 модели с ассоциацией «многие ко многим». Мой код для связывания этих двух моделей работает хорошо (он создает новую коллекцию item_languages__language_items с соответствующими документами внутри). Но тогда у меня возникают проблемы с получением всех связанных данных (языков) определенного элемента. Я использую MongoDB.

// Item.js
module.exports = {
    schema: true,
    autoPK: false,
    attributes: {
        uuid: {
            type: 'string',
            primaryKey: true,
            unique: true,
            required: true,
            uuidv4: true
        },
        languages: {
            collection: 'language',
            via: 'items',
            dominant: true
        }
    }
}

// Language.js
module.exports = {
    schema: true,
    autoPK: false,
    attributes: {
        code: {
            type: 'string',
            primaryKey: true,
            required: true,
            minLength: 2,
            maxLength: 2,
            unique: true
        },
        items: {
            collection: 'item',
            via: 'languages'
        }
    }
}

Данные, хранящиеся в коллекции item_languages__language_items:

/* 0 */
{
    "language_items" : "es",
    "item_languages" : "69e4f3a3-1247-4a06-ae2d-9df27ac9495b",
    "_id" : ObjectId("5330bcebf8e0b61509c771d5")
}

/* 1 */
{
    "language_items" : "fr",
    "item_languages" : "69e4f3a3-1247-4a06-ae2d-9df27ac9495b",
    "_id" : ObjectId("5330bd26f8e0b61509c771d6")
}

/* 2 */
{
    "language_items" : "en",
    "item_languages" : "69e4f3a3-1247-4a06-ae2d-9df27ac9495b",
    "_id" : ObjectId("5330bedcc076355b09da3ccd")
}

Теперь в моем ItemController.js я хочу получить конкретный элемент со всеми связанными языками:

Item
    .findOne({uuid: '69e4f3a3-1247-4a06-ae2d-9df27ac9495b'})
    .populate('languages')
    .exec(function (e, r) {
        console.log(r.toJSON());
    });

Но здесь я получаю свой элемент только с 1 связанным языком, когда я ожидал получить 3 связанных языка.


person Etienne    schedule 25.03.2014    source источник


Ответы (1)


Похоже, это ошибка в текущей бета-версии sails-mongo, из-за которой populate не работает должным образом с пользовательскими ключами. Пожалуйста, отправьте это сообщение на форум проблем с парусами-монго! В то же время единственным решением, по-видимому, является использование первичных ключей MongoDB по умолчанию.

person sgress454    schedule 25.03.2014