如何使用标识符更新包含特定用户信息的文档?

时间:2018-04-03 21:27:12

标签: node.js mongodb mongoose

我在nodejs&上使用mongoose快递服务器。

架构:

var MatchSchema = new mongoose.Schema({
  name: String,
  // list of Strings which are their _id in User collection
  players: [String],
  geolocations: {playerId: {lat: Number, lon: Number}},
});

我的路由

router.post('/:id', function(req, res) {
  Match.update(
    {_id: req.params.id},
    {
      $set: {
        `geolocation.${req.body.myPlayerId}`: {
          lat: req.body.lat,
          lon: req.body.lon
        }
      }
    }
  );
});

这将导致语法错误:geolocation.${req.body.myPlayerId}(ES6中格式化的字符串)

我可以使用JS对象列表,如果这有助于我更轻松地解决这个问题。也许我可以重新考虑我的设计,只需在每个用户文档中存储地理位置信息,然后获取所有地理位置信息,并在发出请求时将其发送给每个玩家。

1 个答案:

答案 0 :(得分:0)

您是否尝试过findByIdsave的组合?

Match.findById(req.params.id, function(err, matchDoc) {

    if (err) throw err;

    matchDoc['geolocations'][${req.body.myPlayerId}] = {lat: req.body.lat, lon: req.body.lon}
    matchDoc.save();
});