【问题标题】:MongoError unknown top level operator: $setMongoError 未知的顶级运算符:$set
【发布时间】:2015-10-15 16:45:40
【问题描述】:

当我这样做时:

return scores.updateQ({_id:score._id},
{
    $set:{"partId":partId,"activityId":activityId},
    $unset:{topicType:'',topicId:'',courseId:''}
},
{strict:false})

其中partIdactivityId 是变量,在别处定义,

我明白了

{ name: 'MongoError',
  message: 'unknown top level operator: $set',
  index: 0,
  code: 2,
  errmsg: 'unknown top level operator: $set' }

这个answer

""unknown top level operator" 消息表示该操作员有 出现在它适用的字段之后。”

但是the documentation 说你可以按照我的方式来做

所以也许还有其他问题?

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    问题是您使用了错误update method 的语法。您应该使用this method's 语法,假设scores 是一个文档。

    return scores.updateQ({
        $set: { "partId": partId, "activityId": activityId},
        $unset: { topicType: '', topicId: '', courseId: ''}
    },
    { strict: false });
    

    另外,在 Mongoose 中,它默认使用 $set,所以这应该是等价的:

    return scores.updateQ({
        partId: partId,
        activityId: activityId,
        $unset: { topicType: '', topicId: '', courseId: ''}
    },
    { strict: false });
    

    编辑:

    我的假设是scores 是一个文档(模型的一个实例):

    var schema = new Schema({});
    var Scores = mongoose.model('Scores', schema);
    var scores = new Scores({});
    

    Scores.updatescores.update 都存在,但语法不同,这可能是导致您的错误的原因。区别如下:

    // Generic update
    Scores.update({ _id: id }, { prop: 'value' }, callback);
    
    // Designed to update scores specifically
    scores.update({ prop: 'value' }, callback);
    

    注意:

    如果这些假设不正确,请在您的答案中包含更多上下文,例如您是如何到达那里的。

    【讨论】:

    • “模型实例”是Model,还是document?我可以在scores 上调用find() 来查询文档,这意味着它是一个模型,对吧?
    • 我更新以澄清语言并增加更多深度。我不知道继承在 Mongoose 中是如何工作的细节,但我不知道,如果你调用 scores.find(),它会上升原型直到在 Scores.find() 找到 find(),所以它有效。但是,这里有相互冲突的更新方法,这是您的问题。
    猜你喜欢
    • 1970-01-01
    • 2018-06-11
    • 2017-09-26
    • 2021-03-12
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    相关资源
    最近更新 更多