流星Mongodb查询不更新没有错误消息

Meteor Mongodb query doesnt update with no error messages

本文关键字:有错误 消息 更新 Mongodb 查询 流星      更新时间:2023-09-26

我一直被困在这个流星问题一段时间。我试图在mongodb的文档中更新一个嵌套数组。然而,它似乎并没有更新文档。此外,没有发出错误消息,这让我感到困惑。

Document structure:
     |----_id
     |----name
     |----members (Array)
          |---- [0]
               |----history (Array)
                     |----[0]={type:2,startdate:010304,enddate:120314}
                     |----[1]={type:1,startdate:140904,enddate:150914}
                     |----[2]={type:3,startdate:241204,enddate:291214}
                     |----!!!!!I WANNA ADD THE ENTRY HERE !!!!!!!!!!
               |----state
          |---- [1]
               |----history (Array)
                     |----[0]={type:2,startdate:010304,enddate:120314}
               |----State

代码

hisobj = {'type':type, 'startdate':startdate,'enddate':enddate};
parstr = "members["+insertmemberid+"].history";
Groups.update({"_id":Session.get("groupid")},{$addToSet:{parstr:{$each: [hisobj]} } });

在您的update函数中,parstr是一个javascript标识符。它被用作属性名而没有被解析。它与使用字符串"parstr"具有相同的效果。要使用变量的值作为属性名,必须使用数组表示法。因此,创建一个对象作为addToSet操作的值,并使用parstr的值在那里设置一个属性。

hisobj = {'type':type, 'startdate':startdate,'enddate':enddate};
parstr = "members." + insertmemberid + ".history";
// create an object to be used as the value of the addToSet operation
var addToSetValue = {};
// the value stored in parstr will be used here
addToSetValue[parstr] = hisobj;
Groups.update({"_id":Session.get("groupid")}, {$addToSet: addToSetValue}}, function (error) {
  if (error) {
    console.log(error);
  }
});

请注意,在parstr中,您需要使用点符号,正如Hubert OG所说。这是另一种情况。我们只是创建字符串mongodb将使用内部做它的魔力。

同样,作为update调用的最后一个参数的回调将让您看到一个可能的错误。

尝试用点符号代替括号:

parstr = "members."+insertmemberid+".history";

假设insertmemberid === 0 .

另外,由于使用了$addToSet操作符,请确保添加到数组中的对象不等于另一个已经存在的对象。