更新 meteor 中的特定字段



我只想更新名称字段,我拥有的代码问题是,如果我更新文档,所有 mongo 文档都会更新。

当我具体更新文档时,我必须承认我是这个 mongo 的新手,所以任何帮助我都感谢您。

客户

更新名称.html

<template name="updatename">
<form class="editor-container">
<input class=“save” type="text" id="card" value=“{{name}}”>
<button type="button" class=“save” id="save">save</button>
</form>
</template>

更新名称.js

Template.updatename.events({
'click .save’: function (e, t) {
e.preventDefault();
FlowRouter.watchPathChange();
var name = FlowRouter.current().params._id;
var name = $('#card').val();

Meteor.call('name.update',name);
FlowRouter.go('/');
}
});

服务器

名称.js

Meteor.methods({
'name.update'( name) {
Name.update({
Name.update({},{ $set: { nam: name }},{multi:true})
});
}
});

我建议在你的流星代码上进行一些即兴创作。

  1. 至少使用标题大小写/驼峰大小写,以便其他开发人员更好地阅读模板名称和流星方法。

  2. 使用
  3. submit .formClassName而不是使用click .save,还要像function (event, template)一样真诚地指定参数名称

  4. 当您为登录用户而不是其他用户更新文档时,正如dmayo在代码中使用Name.update({_id: Meteor.userId()},{ $set: {nam: name}})中提到的,但是当您知道更新时只有 1 条记录时,就没有指定{ multi: true }的意义。当您希望根据肯定会返回 1 条以上记录的条件影响许多记录时,可以使用{ multi: true }

  5. Meteor.method调用中使用check(name, String),以确保发送到服务器的内容符合进一步操作的条件。

  6. 当您知道没有开箱即用的实现并且会很简单时,请使用 aldeed 自动表单。

    以下是即兴代码,以提高可读性和标准

客户

更新名称.html

<template name="UpdateName">
<form class="editorContainerForm">
<input type="text" id="card" value=“{{name}}”>
<button type="submit">Save</button>
</form>
</template>

更新名称.js

Template.UpdateName.events({
'submit .editorContainerForm’: function (event, template) {
event.preventDefault();   
FlowRouter.watchPathChange();
var name = FlowRouter.current().params._id;
var name = $('#card').val();
Meteor.call('updateName',name, function(error, response){
if(error){
// Show some BERT ERROR message for better user experience
// use "meteor add themeteorchef:bert" to add package
} else {
// Show some BERT SUCCESS message for better user experience
});
FlowRouter.go('/');
}
});

服务器

名称.js

Meteor.methods({
updateName( name ) {
check(name, String);
Name.update({ _id: Meteor.userId },{ $set: { name: name }});
// Use below code only if you know there can be multiple records for same ID
// Name.update({ _id: Meteor.userId },{ $set: { name: name }}, { multi: true });
}
});

在您的name.js文件(在服务器上)中,您的 mongo 查询为空,因此当 mongo 查询您的数据库时,它会匹配所有文档/记录。

Name.update(query, changes, options)

这是每个 mongo 文档的格式。您需要有一个唯一标识符。您的表单正在保存一个"名称",这就是您传递给 Meteor.method 的内容,但您没有告诉该方法谁在更改其名称。如果用户已登录,则只需使用 meteor 唯一 idMeteor.userId()

Name.update({_id: Meteor.userId()},{ $set: {nam: name}},{multi:true})

此外,您的选项multi:true显示更新与查询匹配的任何和所有文档。如果在编写的原始方法中,您有multi:false(默认值),则只会更新一个文档(但可能不是您想要的文档,因为第一个匹配项会因为您的空查询字段而更新。

蒙戈文档:https://docs.mongodb.com/manual/reference/method/db.collection.update/气象文档:https://docs.meteor.com/api/collections.html#Mongo-Collection-update

最新更新