【问题标题】:get array if array contains id mongoose如果数组包含 id mongoose,则获取数组
【发布时间】:2016-12-30 20:33:48
【问题描述】:

这是一个棘手的问题。我以为我可以使用 $in,但查询后,它不是我要找的地方。

这是我的架构

var gameSchema = new mongoose.Schema({
    state: {
        type: String,
        default: "invited"
    },
    finished: {
        type: Boolean,
        default: false
    },
    players: {
        type: [{
            type: mongoose.Schema.Types.ObjectId,
            ref: 'users'
        }],
        required: true,
    },
    scores: [scoreSchema],
    chat : [chatSchema]
});

我要发出的请求如下,我发送一个用户 ID,如果玩家数组包含此 ID,则返回数组中的另一个 ID(该数组的长度始终为 2)。

上下文是你可以查找你以前玩过的人。

这是我拥有的,但是“玩家”应该是一个数组,而不是我想要返回的游戏,所以

exports.getFriends = function(id, cb){
    gameSchema.find({ id: { "$in": "players"} }, function(err, games){
        if(err){
            return cb(err, null);
        }
        else{
            return cb(null, games);
        }
    });
};

【问题讨论】:

    标签: arrays node.js mongodb mongoose mongoose-schema


    【解决方案1】:

    你可以试试这个吗?

    exports.getFriends = function(id, cb){
        gameSchema.find({ players: id }, function(err, games) {
            if (err) {
                return cb(err);
            }
            const players = games.map(game => game.players);
            const mergedPlayers = [].concat.apply([], players);
            const mappedPlayers = mergedPlayers.map(String); // convert ObjectIds to strings for comparisons.
            const idString = String(id);
            const filteredPlayers = mappedPlayers.filter(player => player !== idString);
            const uniquePlayers = filteredPlayers.filter((player, index, arr) => arr.indexOf(player) === index);
            return cb(null, uniquePlayers);
        });
    };
    

    我在假设您想要一个唯一的玩家 id 数组不是您传入的玩家 id 的情况下进行操作。我将变量分开而不是链接所有数组方法,以提高可读性。

    【讨论】:

    • 这应该可以。我相信您可以像查询字符串等方式一样查询数组属性中的特定值。
    • 是的。在我看来,这有点奇怪。我的第一直觉是尝试使用 $contains 运算符,但我认为 mongo 中不存在。
    • 确实如此,但我喜欢在 MongoDB 中查询事物是多么容易。 :)
    • 但是如何从数组中获取另一个 id?甚至只是数组播放器,所以我可以提取不同的 id
    • 您希望输出是什么?每个游戏中每个玩家的数组,不是您传入的 id?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 2021-04-29
    • 2021-12-10
    • 2018-12-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    相关资源
    最近更新 更多