我正在研究 spring-boot-data-mongoDB。我在查詢具有特定物件串列的嵌套檔案時遇到一些問題。
模擬課
@Document
public class Mock {
@Id
private String id;
@Indexed(unique = true)
private String name;
private List<Request> requests;
}
請求類
@Document
public class Request {
@Id
private String id;
private int status;
private String method;
private String endPoint;
private Map<String, Object> response;
private Map<String, Object> body;
private Map<String, String> params;
}
示例 JSON
[
{
_id: '53fc6dde-7a534-4b37-a57e-t0bd62f50046',
name: 'mock1',
requests: [
{
status: 200,
method: 'GET',
endPoint: 'status',
response: {},
body: {},
params: {}
}
],
_class: 'com.example.mockserverspring.models.Mock'
},
{
_id: '73fc6dde-7a5b-4b37-a57e-d0bd62f50046',
name: 'tester',
requests: [
{
_id: '802220ea-a1c7-484d-af1b-86e29b540179',
status: 200,
method: 'GET',
endPoint: 'api',
response: {
data: 'GET'
},
body: {
body: 'body'
},
params: {
params: 'params'
}
},
{
_id: 'ff8673d7-01a9-4d6f-a42e-0214a56b227b',
status: 200,
method: 'GET',
endPoint: 'data',
response: {},
body: {
data: 'data'
},
params: {
value: '10'
}
},
{
_id: '7fd5a860-b415-43b0-8115-1c8e1b95c3ec',
status: 200,
method: 'GET',
endPoint: 'status',
response: {},
body: {},
params: {}
}
],
_class: 'com.example.mockserverspring.models.Mock'
}
]
所需的查詢輸出:傳入 endPoint、mockName、body、params 和 method
- 從資料庫中獲取 mockName 的模擬物件。
- 在回傳的模擬的請求串列中匹配 endPoint、body、params、method。
- 從找到的與上述所有條件匹配的請求中回傳回應欄位。
從上面的示例 json :
- 傳入值:mockName:tester,方法:GET,endPoint:api,body:{body:'body'},params:{params:'params'}
- 這應該回傳:回應:{資料:'GET'}
- 當且僅當所有這些條件都匹配時,它才應該回傳。
如有任何疑問,請告訴我。
uj5u.com熱心網友回復:
要執行此搜索,最好使用 mongoDB聚合,在此聚合中,我們將能夠逐步執行操作。
由于您只想查詢陣列中的 1 個子檔案,因此我們必須執行的第一個操作是該陣列的 $unwind。這將分隔每個子檔案,我們可以執行搜索。
{
"$unwind": "$requests"
}
現在我們將介紹 $match 中的搜索引數。我們將能夠使用任意數量的。
{
"$match": {
"name": "tester",
"requests.method": "GET",
"requests.endPoint": "api",
"requests.body": {
body: "body"
},
"requests.params": {
params: "params"
}
}
}
最后,因為我們只想要特定欄位的資訊,所以我們將使用 $replaceRoot 來格式化我們的輸出。
{
"$replaceRoot": {
"newRoot": "$requests.response"
}
}
操場
uj5u.com熱心網友回復:
編輯:你想匹配什么?通常 API/端點在通過 REST 協議呼叫時的作業方式如下:請求 => <= 回應
所以我提出了一個請求,然后我得到了一個資源——不管它好不好我喜歡與否,我都會把它拿回來。我的引數是否匹配。
我無法理解的是整個設計以及您試圖通過哪些引數進行匹配?如果請求串列中不存在值,我們如何匹配?
我認為有很多問題需要首先回答。但這里有一些幫助以及我將如何開始設計:
- Freestyle it 或使用 Swagger 來首先設計 Req 和 Resp 物件(模式)——這些不是你上面的要求。這些是基本的 API 設計
- 二 - 定義發出請求時需要發生的事情,使用哪些引數并期望使用哪些值進行條件檢查
- 定義您期望回傳的內容 - 哪些欄位等。
- 分別定義測驗上述所有前 3 點并端到端
然后您可以使用 Request 中的每個專案來測驗您的 API。將專案拉入/拉出云 mongo 服務(例如 mongodb.com)并使用 express 輕松執行 REST 也是公平的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/344958.html
