Meteor.users.update用户对象中的列表中的元素[Meteor]

时间:2015-07-28 20:17:06

标签: javascript mongodb meteor

我想要Meteor.users.update上的这个示例用户:

{
  "_id": "BfoZ6uWcaPbNwTLGT",
  "nodeHistory": [
    {
      "_nodeHistoryMomentId": "6dcdc770e820aa985fe3a19b",
      "date": "2015-07-28T19:46:30.002Z",
      "numNodes": 4,
      "endDate": null,
      "priceForClusterTime": null
    }
  ],
  "emails": [
    {
      "address": "bfs@gmg.com",
      "verified": false
    }
  ],
  "profile": {
    "name": "alexCl"
  }
}

具体来说,我正在尝试更新给定用户对象中的endDatepriceForClusterTime字段。我试图更新_nodeHistoryMomentId列表的特定元素(nodeHistory),但它找不到我正在寻找的元素(因此不会更新)。如何修改我的mongo参数以执行此更新?

非常感谢!

服务器代码:

totalPrice = 200.00
rightNow = new Date()
Meteor.users.update(
   { _id: Uid, "nodeHistory": {"_nodeHistoryMomentId": previousNodeSetup._nodeHistoryMomentId} },
     {
       $set: { 
        endDate: rightNow,
        priceForClusterTime: totalPrice 
      }
   },
   function(error) {console.log('did not find, and/or did not insert')}
);

2 个答案:

答案 0 :(得分:1)

只需使用节点的完整路径在$set:中指定它,确保将路径放在引号中。

{
  $set: { 
    "nodeHistory.endDate": rightNow,
    "nodeHistory.priceForClusterTime": totalPrice 
}

答案 1 :(得分:0)

因为您正在更新数组,所以您需要使用position operator来选择匹配元素。试一试:

var totalPrice = 200.00;
var rightNow = new Date();
var selector = {_id: Uid, 'nodeHistory._nodeHistoryMomentId': indicator._id};
var modifier = {$set: {
  'nodeHistory.$.endDate': rightNow,
  'nodeHistory.$.priceForClusterTime': totalPrice,
}};
Meteor.users.update(selector, modifier);