gpt4 book ai didi

javascript - 什么是 MongoDB 修饰符和运算符?

转载 作者:可可西里 更新时间:2023-11-01 10:03:50 26 4
gpt4 key购买 nike

我正在开发一个 Meteor 应用程序,我正在构建的功能之一是将新文档插入数组的表单(将送货地址插入到用户配置文件中,用户可以有多个地址)。我不断收到的错误是:

Exception while invoking method 'addAddress' Error: When the modifier option is true, validation object must have at least one operator

我一直试图在 Stackoverflow、Github 等上找出答案,但没有成功,但找不到解决方案。我现在想采用准确理解错误含义的方法 - 所以我的问题是 MongoDB 中的修饰符选项和运算符到底是什么?据我了解,修饰符对查询返回的数据类型提供了约束,运算符用于修改数据。这些定义正确吗?

有谁知道我收到的错误可能意味着什么?这是我的示例代码:

我的点击事件捕获表单上的数据并调用添加地址的方法:

Template.editAddress.events({

'click .addAddress': function(e, tmpl) {
e.preventDefault();
var currentUserId = Meteor.userId();
console.log(currentUserId);
var addressDetails = {
address: {
streetAddress: $('#streetAddress').val()
}
};
console.log(addressDetails);
Meteor.call('addAddress', addressDetails, currentUserId, function(error) {
if (error) {
alert(error.reason);
} else {
console.log('success!');
Router.go('Admin');
}
});

} });

我插入地址的方法:

Meteor.methods({
'addAddress': function(addressDetails, currUserId) {

var currentUserId = currUserId;

console.log('user to add address to is ' + currUserId);

Meteor.users.update(currentUserId, {$addToSet:
{
'address.streetAddress': addressDetails.streetAddress
}
});
}

});

请注意,当我在控制台中键入该查询时,它有效:

db.users.update({_id: 'Qdf89k3fd93jfdk'}, {$addToSet: {'address.streetAddress': '12345 fake st'}});

提前致谢!

最佳答案

您的 addressDetails 对象没有字段 streetAddress,因此 addressDetails.streetAddress 返回 undefined。在更新中改用 addressDetails.address.streetAddress。而且,正如 Joshua 指出的那样,使用一个对象作为带有 { _id: currUserId } 的选择器。所以整个函数应该是:

Meteor.users.update( { _id: currentUserId }, {$addToSet:
{
'address.streetAddress': addressDetails.address.streetAddress
}
});
}

还有一点,您不应该从客户端传递 userId。您定义的任何方法都可以从客户端调用,这样,我就可以使用任何用户 ID 从浏览器控制台调用您的方法 'addAddress' 来更新他们的地址。相反,在方法调用中使用 this.userId 对象(参见 here )并检查它是否不是 null,即用户已登录。

if (! this.userId)
throw new Meteor.Error(401, "You must be logged in!");
var currentUserId = this.userId;

关于javascript - 什么是 MongoDB 修饰符和运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29578833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com