如果数组包含id mongoose,则获取数组

这是一个棘手的问题。 我以为我可以使用$,但在查询后,这不是我所期待的。

这是我的模式

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)。

背景是,你可以查找你以前玩过的人。

这是我的,但“球员”应该是一个arrays,这不是我想要返回的游戏,所以

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

你能试试吗?

 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的数组,而是将这些variables分开,而不是链接所有的数组方法,以提高可读性。