使用以下代码时无法获取要更新的文档:
client.js
// Update the story
Meteor.call('storyEdit', FlowRouter.getParam("_id"), story, function(result){
// put stuff here
});
server.js
Meteor.methods({
'storyEdit': function( id, doc ){
// console.log(doc);
// Update the user
Stories.update(id,{$set:doc},function(error){
if (error) {
throw new Meteor.Error(500, error.message);
} else {
console.log("Update Successful");
}
// response
});
// settings
}
});
文档中有很多嵌套元素。四个最顶层的节点。所以喜欢:
{
title:'.',
genre:'...',
author:'...',
description:'...',
image:'...',
audio:{
intro:'',
background:'...',
outro:'...'
},
credits:[
{
'Story by ':'...'
},
{
'Music by ':'...'
},
{
'Illustrations by ':'...'
}
],
chapters:[
{
title:'Chapter One',
pages:'[Object]',
audio:{
}
},
{
title:'Chapter Two',
pages:'[Object]',
audio:{
}
},
{
title:'Chapter Three',
pages:'[Object]',
audio:{
}
},
{
title:'Chapter Four',
pages:'[Object]',
audio:{
}
},
{
title:'Chapter Five',
pages:'[Object]',
audio:{
}
},
{
title:'Chapter Six',
pages:'[Object]',
audio:{
}
}
],
published:false
}
以上我手动序列化了,所以可能会出错
从终端开始,他们输出为[object]
,但我只是认为这是节省终端空间的预期行为。这可能是问题吗?我希望我可以更新无限子节点(到一点)。
日志输出更新成功。什么都没有改变。终端看起来也很好。
有什么想法吗?
修改
这可能是向后工作,我无法让这个更新更新甚至最基本的东西,比如标题。这是一个例子:
export const Stories = new Mongo.Collection('stories');
if (Meteor.isServer) {
// This code only runs on the server
Meteor.publish('stories', function(){
return Stories.find();
});
}
Meteor.methods({
'storyEdit': function( id, doc ){
// Update the document
Stories.update({id:'58772299f8a253cabcbc625a'},{$set:{title:"123"}},function(error,result){
console.log(error,result);
if (error) {
throw new Meteor.Error(500, error.message);
} else {
console.log("Update Successful");
}
// response
});
// storyEdit
}
});
然后从终端,只需做一个简单的查找,看看是否有任何更新:
db.stories.find({"_id" : ObjectId("58772299f8a253cabcbc625a")},{title:1});
标题永远不会改变。我在这里错过了什么?在编辑阶段可能是权限吗?结果我得到0。所以这就像两个ID完全不同。
答案 0 :(得分:0)
这是使用set:
更新mongo文档的方法 Stories.update({_id:'your id'},{$set:{'chapter':yourDoc}},function(error,result){
if(error){
throw new Meteor.Error(500, error.message);
}
else {
console.log('success')
}
})
检查set addToSet和push之间的一些区别,这可能会有所帮助。
答案 1 :(得分:0)
没有更新,因为您使用了错误的_id
值,我发现您使用此_id
来匹配您的代码中的文档:58772299f8a253cabcbc625a
,但是在终端中您是使用另一个值ObjectId("58772299f8a253cabcbc625a")
。这是两个不同的值,这就是您无法更新文档的原因。
要将字符串转换为Mongo ObjectId,您可以使用此函数:
const _id = new Mongo.ObjectID('58772299f8a253cabcbc625a');
答案 2 :(得分:0)
您几乎所有事情都做得恰到好处,如果您将ID存储为ObjectId
,则需要查找_id
而不是id
。这应该可以解决你的问题
export const Stories = new Mongo.Collection('stories');
if (Meteor.isServer) {
// This code only runs on the server
Meteor.publish('stories', function(){
return Stories.find();
});
}
Meteor.methods({
'storyEdit': function( id, doc ){
const _id = new Meteor.Collection.ObjectID('58772299f8a253cabcbc625a')
// Update the document
Stories.update({ _id }, { $set: { title: '123' } }, function (error,result) {
console.log(error, result);
if (error) {
throw new Meteor.Error(500, error.message);
} else {
console.log("Update Successful");
}
// response
});
// storyEdit
}
});