2

我有 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 种相关语言。

4

1 回答 1

2

这似乎是当前 beta 实现中的一个错误,sails-mongo它无法populate使用自定义键正常工作。请将其发布到sails-mongo 问题论坛!与此同时,唯一的解决方案似乎是使用默认的 MongoDB 主键。

于 2014-03-25T02:22:29.380 回答