我想要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"
}
}
具体来说,我正在尝试更新给定用户对象中的endDate
和priceForClusterTime
字段。我试图更新_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')}
);
答案 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);