首页 > 解决方案 > 使用 $all 匹配 Mongo 数组中的相同项目

问题描述

我正在编写一个简单的二十一点程序。在二十一点中,人们在拿到一对 A 或 8(以及其他时间)时应该分牌。

我将所有可能的手牌组合存储在 Mongo 的唯一文档中。当遵循“二十一点基本策略”时,玩家的每个可能手牌都与可能的庄家上牌和相关动作一起存储。例如:

  { "playerHand": [8,8], "upcard" : 10, "action" : "Split" }
  { "playerHand": ["A","A"], "upcard" : 6, "action" : "Split" }

为了评估一个人的手来决定做什么,我抓住他们的手,存储为一个数组(例如,["A"、"A"] 或 [8,8])并将其传递给我的 Mongo 查询。

这是查询:

strategy = "Basic Strategy"
playerHand = Players.findOne({_id: playerId}).currentHandCards
doc = Strategy.findOne({ $and: [ {name: strategy}, {"playerHand.cards" : { $all: playerHand} }, {"playerHand.situation.upcard" : dealerUpcard} ]})
doc.playerHand.situation.action

这种方法适用于所有可能的牌,但当玩家有一对相同的牌时似乎失败了。我想我一定遗漏了一些关于 $all 如何处理重复项的信息。

感谢您的任何见解!


该集合是使用此插入命令创建的。

  Strategy.insert
    name: "Basic Strategy"
    playerHand:
      cards: playerHand
      situation:
        upcard: upcard
        action: action

标签: arraysmongodbmeteor

解决方案


推荐阅读