Mongodb多个标准,返回错误的结果

时间:2013-07-11 20:01:33

标签: mongodb coffeescript

我在node.js中使用mongodb和mongo-native包,并且我试图在名为“archive”的字段中排除包含值1的文档,并且我不断得到不合适的结果。

这是我在coffeescript中的代码

collection.findOne { _id : new mongo.BSONPure.ObjectID req.params.id ,  "archive" : 0 } ,   (erreur, resultat) ->
       if erreur
          console.log "Erreur: aucun contact de ce nom." + erreur
       else
          res.send resultat
          res.end()

它一直让我回答:

{
  "_id": "51ddb907ae3267d6154a3e64",
  "archive": 1,
  "nom": "G",
  "prenom": "Maxim"
}

有什么问题?

1 个答案:

答案 0 :(得分:0)

您需要添加一些括号以确保将archive: 0参数赋予正确的函数。你现在所拥有的就是这个:

collection.findOne({ _id : new mongo.BSONPure.ObjectID(req.params.id,  "archive" : 0) } ,   (erreur, resultat) -> ...

所以archive: 0参数会发送到new mongo.BSONPure.ObjectId,而findOne只会看到_id参数。

我想你想说:

collection.findOne { _id : new mongo.BSONPure.ObjectID(req.params.id),  "archive" : 0 } ,   (erreur, resultat) -> ...

或者使用额外的变量来减少混乱:

id = new mongo.BSONPure.ObjectID req.params.id
collection.findOne { _id : id, archive: 0 }, (erreur, resultat) -> ...

我倾向于在所有我的CoffeeScript函数调用上加上括号,以使其在视觉上明显发生了什么; OTOH,我有点天生的异教徒:)