为什么我在$或$和查询中出现语法错误?

问题描述:

Mongo不断给我这条线上的语法错误;

existingVideo = self.request.root.db.videos.find_one({ '$or' : [ { '_id' : ObjectId(video["serverVideoID"]) } , '$and' : [ { '_id' : serverAuthorID } , { 'clientGUID' : video['clientGUID'] } ] ] }) 

但我看不出它有什么问题。它看起来对我有效,但任何人都可以在这里发现错误?

+0

'{ '$或':[{“'你确定你的阵列是否正确关闭? – Shaheer 2012-08-12 05:32:32

+0

您需要在{}中包含整个$和:..表达式,即在末尾添加{之前的$和和之间的]以及]。 – 2012-08-12 06:01:02

+0

@AsyaKamsky如果你在一个答案中重新写我的行我会给你一个绿色支票 – zakdances 2012-08-12 06:05:51

看起来您缺少$和子句中的一组{ }

您的查询应该是:

existingVideo = self.request.root.db.videos.find_one( 
{ '$or' : 
    [ 
    { '_id' : ObjectId(video["serverVideoID"]) 
    } , 
    {'$and' : 
      [ { '_id' : serverAuthorID } , { 'clientGUID' : video['clientGUID'] } 
      ] 
    } 
    ] 
}) 
+0

谢谢你......但为什么$和需要包裹在{}中,而不是$或(除了第一个{}无论如何)? – zakdances 2012-08-12 06:14:52

+0

第一个{将$或表达式“包装”为JSON文档。那么$或者需要一个JSON文档数组(其中{$和:[]}是一个)。 – 2012-08-12 06:19:07

+0

虽然当然$并且没有必要 – Sammaye 2012-08-12 17:43:38