gpt4 book ai didi

javascript - Mongoose - 遍历对象

转载 作者:行者123 更新时间:2023-11-29 23:52:52 25 4
gpt4 key购买 nike

在 node.js 上使用 mongoose 我试图找到玩家 game.players.id 等于我传递的 id 的所有游戏。

架构:

var Game = mongoose.Schema({

id: String,
date: { type: Date, default: Date.now },
game: Object,
isOnline: Boolean

});

我不确定这个函数有什么问题,但它返回空数组:

var specificGameStatistics = function (user, game) {
var deferred = q.defer()
Game.find({ "game.players.id" : user, "game.rules.gameType": game.gameType, "game.rules.quatro": game.quatro}, function(err, data) {
deferred.resolve(data);
});
return deferred.promise;
}
////////////////////USAGE///////////////
var testGame = {rules: {gameType : 1, quatro : null}}
UsersCtrl.specificGameStatistics(data.id, testGame).then(function(userData) {
console.log(userData);
});

这是已经保存在数据库中的游戏示例:

{
"isOnline" : true,
"game" : {
"numberOfPlayers" : NumberInt("1"),
"players" : [
{
"id" : "58a2c0ecd8ba9f8602836870",
"name" : "PlayerName",
"type" : NumberInt("1"),
"avgStatistic" : "30.00",
"numbersHit" : NumberInt("1"),
"totalScore" : NumberInt("60"),
..............................
}
], //there is more players here
"rules" : {
"gameType" : NumberInt("1"),
"quatro" : null,
"rounds" : NumberInt("1"),
} // there is more in JSON object
...............................
"_id" : ObjectId("58aed4aeea20ecdf0c426838"),
"date" : ISODate("2017-02-23T13:25:18.284+01:00"),
"__v" : NumberInt("0")
}

我已经测试过玩家 ID 是相等的,但它仍然返回空数组。 测试代码:

///////////TEST//////////////
console.log(data.id, "58a2c0ecd8ba9f8602836870");
if (data.id === "58a2c0ecd8ba9f8602836870") {console.log("this is true");}
var testGame = {rules: {gameType : 1, quatro : null}}
UsersCtrl.specificGameStatistics(data.id, testGame).then(function(userData) {
console.log(userData);
});
//////////TEST///////////////

它返回:
58a2c0ecd8ba9f8602836870 58a2c0ecd8ba9f8602836870
这是真的
[]

-------------------------------------------- ---------------------------------------------- ------

答案:在 Deividas Karžinauskas 的帮助下,解决方案是:

Game.where('game.players.id', user).where('game.rules.gameType', game.rules.gameType).find({}, function(err, data) { //, "game.rules.quatro": game.quatro
deferred.resolve(data);
});

最佳答案

这是因为您指定的附加规则 ({gameType : 1, quatro : null}) 在玩家对象中不存在 (

{
"id" : "58a2c0ecd8ba9f8602836870",
"name" : "PlayerName",
"type" : NumberInt("1"),
"avgStatistic" : "30.00",
"numbersHit" : NumberInt("1"),
"totalScore" : NumberInt("60"),
..............................
}

)。您只需按 ID 查找游戏即可确认这一点。

如果你想添加这些规则,那么你应该找到所有符合这些规则的游戏,然后寻找特定玩家的游戏。

关于javascript - Mongoose - 遍历对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42434718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com