我正在編寫一個查詢以僅處理數組中的一個項目,但查詢正在返回整個數組。發現查詢返回數組中的所有項目,儘管只查詢一個
我有這樣的數據的集合:
"testScenarioId":"100",
"testSteps":[
{
"edit":false,
"controlId":1450419683150,
"controlName":"scanTextBox",
"objProp":"id->articleSearch_scanViewPopup_field",
"objPropType":15,
"action":{
"id":6
},
"screenId":1450419663920,
"screenName":"Order.Scan",
"applicationId":4,
"applicationName":"GSM",
"testCaseId":"100",
"index":1,
"testStepNumber":"1"
},
{
"edit":false,
"controlId":1450419683894,
"controlName":"scansearchbutton",
"objProp":"id->articleSearch_scanViewPopup_field_HelpIcon",
"objPropType":17,
"action":{
"id":2
},
"screenId":1450419663920,
"screenName":"Order.Scan",
"applicationId":4,
"applicationName":"GSM",
"testCaseId":"100",
"index":2,
"testStepNumber":"2"
}]}
我想基於標準"testScenarioId" : "100"
和"testSteps.testStepNumber" : "1"
更新集合;這意味着,當我運行此命令的testSteps數組中的第一個文件必須更新,如下圖所示
{
"edit":false,
"controlId":1450419683150,
"controlName":"scanTextBox",
"objProp":"id->articleSearch_scanViewPopup_field",
"objPropType":15,
"action":{
"id":6
},
"screenId":1450419663920,
"screenName":"Order.Scan",
"applicationId":4,
"applicationName":"GSM",
"testCaseId":"100",
"index":1,
"testStepNumber":"1"
}
但讓我吃驚:
db.TestSteps.find({"testScenarioId":"100","testSteps.testStepNumber":"1"})
在mongo shell中,我得到了全部是這個文件在testSteps數組中。
編輯:我想知道的Java代碼,以更新使用上述條件的陣列中的一文件。
在此先感謝。
喜非難和歡迎堆棧溢出。請記住,find查詢中的條件僅確定集合中的哪些文檔被返回;它們不會影響返回中包含哪些子文檔(在數組中)。 要從數組中返回一個項目,您需要查看聚合查詢中的[unwind operator](https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/)。 –