2016-03-04 60 views
0

我想创建mongodb在春季数据可选查询,但获取错误。任何人都可以请帮我解决这个问题。需要帮助mongodb查询之间可选参数

请注意此查询是日期范围

之间下面是查询

@Query(value = "{ $and: [ 
        {$or : [ { $where: '?0 == null' } , { createdDate : {$gt : ?0} }]}, 
        {$or : [ { $where: '?1 == null' } , { createdDate : {$lt : ?1} }]} 
] }") 

下面是生成的查询

{ "$and" : [ 
{ "$or" : [ { "$where" : "{ \"$date\" : \"2016-02-28T18:30:00.000Z\"} == null"} , 
{ "createdDate" : { "$gt" : { "$date" : "2016-02-28T18:30:00.000Z"}}}]} , 

{ "$or" : [ { "$where" : "{ \"$date\" : \"2016-03-11T18:30:00.000Z\"} == null"} , 
{ "createdDate" : { "$lt" : { "$date" : "2016-03-11T18:30:00.000Z"}}}]} 
]} 

得到以下错误

org.springframework.data.mongodb.UncategorizedMongoDbException: { "serverUsed" : "localhost:27017" , "waitedMS" : 0 , "ok" : 0.0 , "errmsg" : "Failed to call method" , "code" : 1}; nested exception is com.mongodb.CommandFailureException: { "serverUsed" : "localhost:27017" , "waitedMS" : 0 , "ok" : 0.0 , "errmsg" : "Failed to call method" , "code" : 1} 
+0

很抱歉,但你真的失去了我这里,而且大多因为你试图在正确的语法是如此不正确,很难确定你的意思。 ['$ where']是一个接受JavaScript函数以在文档选择标准中解析为“true/false”的参数。这不是你在做什么。也许在再次询问文档之前仔细看看文档 –

+0

也不是这种'@ Query'用法在spring-mongo中的粉丝。我认为这只是迎合了那些在休眠中使用类似签名属性的人,但并不知道他们的意思。具有“对象”参数的9/10情况是,您最好只是检查通常比在对象的方法调用中尝试合理化命名参数。 –

+0

如果上述查询令人困惑,请致歉。我正在尝试编写查询以获取日期范围内的记录。如果只有startdate存在,那么我需要所有在startdate之后创建的记录,并且如果只有todate礼物,那么我只需要所有在todate之前创建的记录。如果两者都失踪,那么我需要所有的记录。这是我想要做的。 – OneTwo

回答

1

您的查询也不是很清楚,但是从我的理解(基于0和1插值和你的意见?):

@Query(value = "{ $or: [ 
        {$and : [ { toDate: { $exists: false } } , { startDate: { $exists: true } }, { createdDate : {$gt : ?0} }]}, 
        {$and : [ { toDate: { $exists: true } }, { startDate: { $exists: false } } , { createdDate : {$lt : ?1} }]}, 
        {$and : [ { toDate: { $exists: false } }, { startDate: { $exists: false } } 
] }")