更新数组MongoDB中的文档

时间:2016-11-24 03:53:25

标签: node.js mongodb mongoose

我知道这个问题之前已经有过各种各样的问题,但是我已经全部阅读了这些问题而我无法使用以下内容:

这是一个文档示例:

"_id" : ObjectId("583659c5be5f0e6f70c95633"),
"firstName" : "da",
"lastName" : "ksk",
"email" : "papap@aol.com",
"surveyResults" : [
    {
        "mouseTracking" : [ ],
        "result" : "White",
        "question" : "What color website do you prefer?",
        "questionNumber" : "0"
    },
    {
        "mouseTracking" : [ ],
        "result" : "Laptop",
        "question" : "What device do you use most to browse the web?",
        "questionNumber" : "1"
    }]

这是我试图在猫鼬中运行并且没有运气:

db.results.update({_id:userIdVar, surveyResults: {$elemMatch: {questionNumber: questionNumVar}}},{$set:{"surveyResults.$.result" : newResultVar}});

我有变量被使用,我知道它们有适当的值来匹配我需要更新的地方。有什么我想念的吗?

2 个答案:

答案 0 :(得分:0)

到目前为止,我认为类型匹配与元素匹配。在您的数据示例中, questionNumber 是字符串,因此如果您与整数类型 questionNumVar 进行比较,那么它应该不起作用。所以比较需要转换为字符串(如果是整数)否则应该工作。

可以尝试:

db.results.update({_id:userIdVar, surveyResults: {$elemMatch: {questionNumber: questionNumVar.toString()}}},{$set:{"surveyResults.$.result" : newResultVar}}).exec();

然后它应该工作。

答案 1 :(得分:0)

我在整个条件中以及更新之前和之后添加了几个级别的控制台日志记录,并且看到所有路径都在运行。然后我添加了一行:

mongoose.set('debug', true);

这会记录与db的所有mongoose交互。我看到我粘贴的命令甚至没有运行!事实证明我不小心离开了

 .exec() 
最后

所以它没有执行命令。经过一个小时的检查和三重检查我的语法,变量类型,就是这样。

我在这个过程中做了更多关于$运算符的知识,如果你不知道它在mongoose / mongodb中的位置,你应该阅读它