DocumentDB SQL - Lặp lại

Trong DocumentDB SQL, Microsoft đã thêm một cấu trúc mới có thể được sử dụng với từ khóa IN để cung cấp hỗ trợ cho việc lặp qua các mảng JSON. Việc hỗ trợ lặp lại được cung cấp trong mệnh đề FROM.

Chúng tôi sẽ xem xét ba tài liệu tương tự từ các ví dụ trước một lần nữa.

Sau đây là AndersenFamily tài liệu.

{ 
   "id": "AndersenFamily", 
   "lastName": "Andersen", 
	
   "parents": [ 
      { "firstName": "Thomas", "relationship":  "father" }, 
      { "firstName": "Mary Kay", "relationship":  "mother" } 
   ],
   
   "children": [ 
      { 
         "firstName": "Henriette Thaulow", 
         "gender": "female", 
         "grade": 5, 
         "pets": [ { "givenName": "Fluffy", "type":  "Rabbit" } ] 
      } 
   ],
   
   "location": { "state": "WA", "county": "King", "city": "Seattle" }, 
   "isRegistered": true 
}

Sau đây là SmithFamily tài liệu.

{ 
   "id": "SmithFamily", 
	
   "parents": [ 
      { "familyName": "Smith", "givenName": "James" }, 
      { "familyName": "Curtis", "givenName": "Helen" } 
   ],
   
   "children": [ 
      {
         "givenName": "Michelle", 
         "gender": "female", 
         "grade": 1 
      },
		
      { 
         "givenName": "John", 
         "gender": "male", 
         "grade": 7,
			
         "pets": [ 
            { "givenName": "Tweetie", "type": "Bird" } 
         ] 
      } 
   ],
   
   "location": { 
      "state": "NY", 
      "county": "Queens", 
      "city": "Forest Hills" 
   },
   
   "isRegistered": true 
}

Sau đây là WakefieldFamily tài liệu.

{ 
   "id": "WakefieldFamily",
	
   "parents": [ 
      { "familyName": "Wakefield", "givenName": "Robin" }, 
      { "familyName": "Miller", "givenName": "Ben" } 
   ],
   
   "children": [ 
      { 
         "familyName": "Merriam", 
         "givenName": "Jesse", 
         "gender": "female", 
         "grade": 6,
			
         "pets": [ 
            { "givenName": "Charlie Brown", "type": "Dog" }, 
            { "givenName": "Tiger", "type": "Cat" },
            { "givenName": "Princess", "type": "Cat" } 
         ] 
      },
		
      { 
         "familyName": "Miller", 
         "givenName": "Lisa", 
         "gender": "female", 
         "grade": 3,
			
         "pets": [ 
            { "givenName": "Jake", "type": "Snake" } 
         ] 
      } 
   ],
   
   "location": { "state": "NY", "county": "Manhattan", "city": "NY" }, 
   "isRegistered": false 
}

Hãy xem một ví dụ đơn giản không có từ khóa IN trong mệnh đề FROM.

Sau đây là truy vấn sẽ trả về tất cả các phụ huynh từ bộ sưu tập Gia đình.

SELECT *  
FROM Families.parents

Khi truy vấn trên được thực thi, nó tạo ra kết quả sau.

[ 
   [ 
      { 
         "familyName": "Wakefield", 
         "givenName": "Robin" 
      },
		
      { 
         "familyName": "Miller", 
         "givenName": "Ben" 
      } 
   ], 
	
   [ 
      { 
         "familyName": "Smith", 
         "givenName": "James" 
      },
		
      { 
         "familyName": "Curtis", 
         "givenName": "Helen" 
      } 
   ], 
	
   [ 
      { 
         "firstName": "Thomas", 
         "relationship": "father" 
      },
		
      {
         "firstName": "Mary Kay", 
         "relationship": "mother" 
      } 
   ] 
]

Như có thể thấy trong đầu ra ở trên, cha mẹ của mỗi gia đình được hiển thị trong một mảng JSON riêng biệt.

Hãy xem cùng một ví dụ, tuy nhiên lần này chúng ta sẽ sử dụng từ khóa IN trong mệnh đề FROM.

Sau đây là truy vấn có chứa từ khóa IN.

SELECT *  
FROM c IN Families.parents

Khi truy vấn trên được thực thi, nó tạo ra kết quả sau.

[ 
   { 
      "familyName": "Wakefield", 
      "givenName": "Robin" 
   }, 
	
   { 
      "familyName": "Miller", 
      "givenName": "Ben" 
   },
	
   { 
      "familyName": "Smith", 
      "givenName": "James" 
   },
	
   { 
      "familyName": "Curtis", 
      "givenName": "Helen" 
   },
	
   { 
      "firstName": "Thomas", 
      "relationship": "father" 
   },
	
   { 
      "firstName": "Mary Kay", 
      "relationship": "mother" 
   }
	
   { 
      "id": "WakefieldFamily", 
      "givenName": "Jesse", 
      "grade": 6 
   } 
]

Trong ví dụ trên, có thể thấy rằng với phép lặp, truy vấn thực hiện lặp lại các bậc cha mẹ trong bộ sưu tập có mảng đầu ra khác nhau. Do đó, tất cả cha mẹ từ mỗi gia đình được thêm vào một mảng duy nhất.