简体   繁体   English

Mongo DB-查询对象的嵌套数组

[英]Mongo db - Querying a nested array of objects

I am really struggling with building a REST api with the data I have below, everything works fine on the client side but when I need to make POST requests to update players I cannot figure out how to query mongodb. 我真的很努力用下面的数据构建REST api,在客户端上一切正常,但是当我需要发出POST请求更新players我不知道如何查询mongodb。

The route 路线

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

The mongodb query 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);    
            }
        });
    }
};

The Json data 杰森数据

[
   {
      "__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"
         }
      ]
   }
]

As you are trying to search within players array I think you will have to use elemMatch: 当您尝试在玩家数组中搜索时,我认为您将必须使用elemMatch:

Please find the docs related to the same: http://docs.mongodb.org/manual/reference/operator/projection/elemMatch/ 请找到与此相关的文档: http : //docs.mongodb.org/manual/reference/operator/projection/elemMatch/

PS: I have not tried this as I do not have NodeJS with Mongo on my system now. PS:我还没有尝试过,因为我的系统上现在没有NodeJS和Mongo。

Usually people are using PUT method to update model. 通常人们使用PUT方法来更新模型。
Check the update method in mongodb docs. 检查mongodb文档中的更新方法。

Route 路线

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

Controller 控制者

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);    
      }
    });
  }
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM