查询一个嵌套的数组对象

Mongo db - Querying a nested array of objects

本文关键字:嵌套 数组 对象 一个 查询      更新时间:2023-09-26

我真的在努力用下面的数据构建一个REST api,在客户端一切都很好,但当我需要发出POST请求来更新players时,我不知道如何查询mongodb。

路由

router.get('/api/teams/:teamid/player/:playerid', player.getById);

mongodb查询

module.exports = {
    getById: function(req, res) {
        models.Team.findOne({"players.player_name":"Jokim"}, function(err, player) {
            if (err) {
                res.json({error: 'player not found.'});
            } else {
                console.log(player);
                res.json(player);    
            }
        });
    }
};

Json数据

[
   {
      "__v":0,
      "_id":"5362dcf7e99615aa392d7d72",
      "assists":80,
      "blocks":14,
      "feed":null,
      "fouls":20,
      "made_one":10,
      "made_three":5,
      "made_two":15,
      "missed_one":4,
      "missed_three":4,
      "missed_two":20,
      "percentage":50,
      "points":44,
      "rebounds":100,
      "steals":33,
      "team_name":"Bulls",
      "players":[
         {
            "player_name":"Jokim",
            "_id":"5365f079ed4914600d9342c7",
            "team_name":"",
            "team_id":"",
            "points":0,
            "made_one":0,
            "made_two":0,
            "made_three":0,
            "missed_one":0,
            "missed_two":0,
            "missed_three":0,
            "percentage":0,
            "assists":0,
            "rebounds":0,
            "steals":0,
            "blocks":0,
            "fouls":0,
            "feed":""
         },
         {
            "player_name":"Taj",
            "_id":"5365f079ed4914600d9342c6",
            "team_name":"",
            "team_id":"",
            "points":0,
            "made_one":0,
            "made_two":0,
            "made_three":0,
            "missed_one":0,
            "missed_two":0,
            "missed_three":0,
            "percentage":0,
            "assists":0,
            "rebounds":0,
            "steals":0,
            "blocks":0,
            "fouls":0,
            "feed":""
         }
      ]
   },
   {
      "team_name":"Wizards",
      "points":44,
      "made_one":10,
      "made_two":15,
      "made_three":5,
      "missed_one":4,
      "missed_two":20,
      "missed_three":4,
      "percentage":50,
      "assists":80,
      "rebounds":100,
      "steals":33,
      "blocks":14,
      "fouls":20,
      "feed":null,
      "_id":"5362dcf7e99615aa392d7d75",
      "__v":0,
      "players":[
         {
            "player_name":"John Wall",
            "points":22,
            "made_one":3,
            "made_two":4,
            "made_three":5,
            "missed_one":2,
            "missed_two":3,
            "missed_three":4,
            "percentage":5,
            "assists":2,
            "rebounds":2,
            "steals":2,
            "blocks":5,
            "fouls":3,
            "feed":null,
            "facebook_id":null,
            "_id":"5362dcf7e99615aa392d7d77"
         },
         {
            "player_name":"Bradley Beal",
            "points":22,
            "made_one":3,
            "made_two":4,
            "made_three":5,
            "missed_one":2,
            "missed_two":3,
            "missed_three":4,
            "percentage":5,
            "assists":2,
            "rebounds":2,
            "steals":2,
            "blocks":5,
            "fouls":3,
            "feed":null,
            "facebook_id":null,
            "_id":"5362dcf7e99615aa392d7d76"
         }
      ]
   }
]

当你试图在玩家数组中搜索时,我认为你必须使用elemMatch:

请查找与此相关的文档:http://docs.mongodb.org/manual/reference/operator/projection/elemMatch/

PS:我没有尝试过这个,因为我没有NodeJS与Mongo在我的系统现在

人们通常使用PUT方法来更新模型。
查看mongodb文档中的更新方法

router.put('/api/teams/:teamid/player/:playerid', player.updatePlayer);
控制器

module.exports = {
  updatePlayer: function(req, res) {
    models.Team.update({"players.player_name":"Jokim"}, {$set: {assist: 100}}, function(err, player) {
      if (err) {
        res.json({error: err});
      } else {
        console.log(player);
        res.json(player);    
      }
    });
  }
};