@Query MongoDb Spring存储库的命名参数

时间:2016-07-06 15:05:01

标签: spring mongodb spring-data-mongodb spring-repositories

是否可以在mongodb存储库中为@Query方法使用命名参数,就像我们可以使用jpa存储库一样(http://docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/html/jpa.repositories.html第2.3.5节)?

举个例子,我想使用以下代码:

@Query("{'store' : :store, 'app' : :app }")
List<T> findByStoreAndApp(@Param("store") String store, @Param("app") String app);

而不是:

@Query("{'store' : ?0, 'app' : ?1 }")
List<T> findByStoreAndApp(String store, String app);

2 个答案:

答案 0 :(得分:3)

有可能,请尝试:

{
    "responseId": "*****************************",
    "queryResult": {
        "queryText": "actions_intent_TRANSACTION_REQUIREMENTS_CHECK",
        "parameters": {},
        "allRequiredParamsPresent": true,
        "fulfillmentText": "HERE",
        "fulfillmentMessages": [
            {
                "text": {
                    "text": [
                        "HERE"
                    ]
                }
            }
        ],
        "outputContexts": [
            {
                "name": "*****************************"
            },
            {
                "name": "*****************************"
            },
            {
                "name": "*****************************"
            },
            {
                "name": "*****************************"
            },
            {
                "name": "*****************************"
            },
            {
                "name": "*****************************",
                "parameters": {
                    "TRANSACTION_REQUIREMENTS_CHECK_RESULT": {
                        "@type": "type.googleapis.com/google.actions.v2.TransactionRequirementsCheckResult",
                        "resultType": "OK"
                    }
                }
            }
        ],
        "intent": {
            "name": "*****************************",
            "displayName": "Int2"
        },
        "intentDetectionConfidence": 1,
        "diagnosticInfo": {},
        "languageCode": "en-us"
    },
    "originalDetectIntentRequest": {
        "source": "google",
        "version": "2",
        "payload": {
            "isInSandbox": true,
            "surface": {
                "capabilities": [
                    {
                        "name": "actions.capability.WEB_BROWSER"
                    },
                    {
                        "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
                    },
                    {
                        "name": "actions.capability.SCREEN_OUTPUT"
                    },
                    {
                        "name": "actions.capability.AUDIO_OUTPUT"
                    }
                ]
            },
            "inputs": [
                {
                    "rawInputs": [
                        {
                            "inputType": "KEYBOARD"
                        }
                    ],
                    "arguments": [
                        {
                            "extension": {
                                "@type": "type.googleapis.com/google.actions.v2.TransactionRequirementsCheckResult",
                                "resultType": "OK"
                            },
                            "name": "TRANSACTION_REQUIREMENTS_CHECK_RESULT"
                        }
                    ],
                    "intent": "actions.intent.TRANSACTION_REQUIREMENTS_CHECK"
                }
            ],
            "user": {
                "lastSeen": "2018-05-16T11:15:14Z",
                "locale": "en-US",
                "userId": "*****************************"
            },
            "conversation": {
                "conversationId": "1526470000479",
                "type": "ACTIVE",
                "conversationToken": "[]"
            },
            "availableSurfaces": [
                {
                    "capabilities": [
                        {
                            "name": "actions.capability.SCREEN_OUTPUT"
                        },
                        {
                            "name": "actions.capability.AUDIO_OUTPUT"
                        }
                    ]
                }
            ]
        }
    },
    "session": "*****************************"
}

Spring Data MongoDB 1.8中引入了@Query中SpEL表达式的支持。

答案 1 :(得分:0)

我担心spring boot会在源代码中提供此功能。

您可以创建界面并扩展 MongoRepository 它提供了一些简单的方法,你不需要它的实现。 就像使用JpaRepository一样。

&#13;
&#13;
@NoRepositoryBean
public interface MongoRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID> {
    <S extends T> List<S> save(Iterable<S> var1);

    List<T> findAll();

    List<T> findAll(Sort var1);

    <S extends T> S insert(S var1);

    <S extends T> List<S> insert(Iterable<S> var1);
}
&#13;
&#13;
&#13;

但是,如果你需要做一些特殊的查询。您可以@Autowired MongoTemplate 并使用自己的方法。对于redis,springboot甚至没有像MongoRepository那样提供Repository。您只能使用StringRedisTemplate之类的模板进行查询操作。 可能是后者,spring boot会为NoSql添加与JpaRepository相同的功能。但现在,它并没有提供这个功能。