如果数组包含 id 猫鼬,则获取数组
get array if array contains id mongoose
这是一个棘手的问题。我以为可以用$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,return 中的另一个 ID(数组的长度始终为 2)数组。
上下文是您可以查找之前与谁比赛过。
这是我的,但是"players"应该是一个数组,我想要的不是游戏return,所以
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,这些 ID 是 而不是 您传入的玩家 ID。我将 vars 分开而不是链接所有数组方法,以提高可读性。
这是一个棘手的问题。我以为可以用$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,return 中的另一个 ID(数组的长度始终为 2)数组。
上下文是您可以查找之前与谁比赛过。
这是我的,但是"players"应该是一个数组,我想要的不是游戏return,所以
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,这些 ID 是 而不是 您传入的玩家 ID。我将 vars 分开而不是链接所有数组方法,以提高可读性。