MongoError未知顶级运算符:$ set

时间:2015-07-24 21:40:41

标签: mongodb mongoose

当我这样做时:

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

  

“未知的顶级操作员”消息表示操作员具有   出现在它适用的领域之后。“

但是the documentation说你可以按照我的方式做到这一点

所以也许还有其他错误?

1 个答案:

答案 0 :(得分:3)

问题在于您使用错误this method's的语法。您应该使用value types语法,假设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);

注:

如果这些假设不正确,请在答案中加入更多背景信息,例如您如何到达那里。