mongodb:在查询中使用$ where时出现意外的令牌ILLEGAL

时间:2015-07-16 19:09:54

标签: mongodb

在我的收藏中,我有一个名为anchorDates的字段,看起来像

{
    anchorDates: {
        "12345:TS" : "2015-07-16T18:10:15+00:00"
    }
}

我尝试了一个使用$ where:

的查询
db.members.find({$where:function(){return this[anchorDates][12345:TS]=="2015-07-16T18:49:04+00:00"}})

并且它给出了错误

Unexpected token ILLEGAL

我也试过

db.members.find({$where:function(){return this.anchorDates.12345:TS=="2015-07-16T18:49:04+00:00"}})

并得到相同的错误,我认为它是因为12345和TS之间的冒号,但不知道如何查询这个。谢谢!

1 个答案:

答案 0 :(得分:2)

如果使用括号,则需要引用字符串:

this['anchorDates']['12345:TS']

OR:

this.anchorDates['12345:TS']

在您的示例中将是:

db.members.find({$where:function(){return this["anchorDates"]["12345:TS"]=="2015-07-16T18:49:04+00:00"}})

但如果可以的话,你应该使用更简单的查询:

db.members.find({"anchorDates.12345:TS":"2015-07-16T18:49:04+00:00"})

如果其他任何查询运算符都不起作用,则使用$where是最后的手段。查看documentation了解详情。