使用数据作为密钥时的upserting

时间:2016-01-28 17:21:58

标签: node.js mongodb

我已经获得了以下功能,只要detail参数是按字母顺序排列且不包含句点,该功能就有效。如何将键设置为提供的字符串。

var logHit = function(data, callback){
  var update = {};
  var inc = {};
  var detail = data.detail;
  inc['detail.'+detail+'.daily'] = 1; // <----- this line!
  update['$inc'] = inc;

  collection.update(
    {
      directory_id: data.directory_id,
      date: data.date.y+'-'+data.date.m,
      action: data.data.info[0],
    },
    update,
    {upsert: true},
    function(error, result){
      assert.equal(error, null);
      assert.equal(1, result.result.n);
      callback();
  });
}

我已经使用了inc['detail."'+detail+'".daily'] = 1;虽然它解决了一个问题,但它会创建一些其他问题,例如导致问题的"字符,并且密钥以{{1开头和结尾字符。

有没有办法让句点和句号都有效,这是一个好主意吗?或者我应该剥离特殊字符并将完整字符串包含在一个单独的参数中,该参数对命名没有限制?

1 个答案:

答案 0 :(得分:0)

这不是一个好主意。 Restrictions on Field Names读到:

  

字段名称不能包含点(即。)或空字符,并且它们不能以美元符号开头