คำอธิบาย
จัดเรียงเอกสารอินพุตตามลำดับการจัดเรียงที่ระบุอย่างน้อย 1 รายการ
ตัวอย่าง
Web
const results = await execute(db.pipeline() .collection("books") .sort( field("release_date").descending(), field("author").ascending() ) );
Swift
let results = try await db.pipeline() .collection("books") .sort([ Field("release_date").descending(), Field("author").ascending() ]) .execute()
Kotlin
val results = db.pipeline() .collection("books") .sort( field("release_date").descending(), field("author").ascending() ) .execute()
Java
Task<Pipeline.Snapshot> results = db.pipeline() .collection("books") .sort( field("release_date").descending(), field("author").ascending() ) .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field results = ( client.pipeline() .collection("books") .sort(Field.of("release_date").descending(), Field.of("author").ascending()) .execute() )
Java
Pipeline.Snapshot results = firestore .pipeline() .collection("books") .sort(descending(field("release_date")), ascending(field("author"))) .execute() .get();
พฤติกรรม
ลำดับการจัดเรียง
ลำดับการจัดเรียงเป็นไปตามCloud Firestoreลำดับประเภทค่า
ลำดับผลลัพธ์ที่แน่นอน
หากไม่มีsortในคําค้นหา การจัดลําดับผลลัพธ์ที่แสดง
จะไม่แน่นอนและอาจแตกต่างกันไปในแต่ละการดําเนินการ หากมีsortระยะหนึ่ง
แต่การเรียงลำดับนิพจน์ไม่สามารถสร้างการเรียงลำดับที่ไม่ซ้ำกันในผลลัพธ์ที่ส่งคืน
การเรียงลำดับของผลลัพธ์ที่ส่งคืนอาจยังคงแตกต่างกันระหว่างการดำเนินการ
เช่น การจัดเรียงเมืองตามcountryของเมืองใน ลำดับจากน้อยไปมากเทียบกับชุดข้อมูลต่อไปนี้
{ name: "Los Angeles", state: "CA", country: "USA", population: 3970000 },
{ name: "New York", state: "NY", country: "USA", population: 8530000 }
{ name: "San Francisco", state: "CA", country: "USA", population: 870000 },
สามารถสร้างการเรียงสับเปลี่ยนเอกสารทั้ง 3 รายการในชุดข้อมูลได้เนื่องจากเอกสารทั้งหมดมีแอตทริบิวต์ country เดียวกัน หากต้องการสร้างลำดับผลลัพธ์ที่แน่นอน คุณสามารถต่อท้ายลำดับการจัดเรียงใน name ไปยังลำดับได้ดังนี้
Node.js
const results = await db.pipeline()
.collection("/cities")
.sort(field("country").ascending(), fieldd("__name__").ascending())
.execute();
ซึ่งจะใช้ชื่อเอกสารที่ไม่ซ้ำกันเป็นตัวตัดสินเมื่อเอกสารหลายรายการมีค่า country เดียวกัน โปรดทราบว่าสามารถใช้ฟิลด์อื่นๆ ที่ รวมกับฟิลด์ country เพื่อสร้างคีย์ที่ไม่ซ้ำกันของเอกสาร ภายในคอลเล็กชันเพื่อสร้างลำดับผลลัพธ์ที่แน่นอนได้
การจัดเรียงค่าที่เทียบเท่า
ระบบจะจัดเรียงค่าที่เทียบเท่ากันไว้ด้วยกัน แต่ลำดับของผลลัพธ์ภายใน คลาสที่เทียบเท่ากันจะไม่แน่นอนตามการอภิปรายลำดับผลลัพธ์ที่แน่นอน ตัวอย่างเช่น การจัดเรียงเมืองตาม size ในลำดับจากน้อยไปมากเทียบกับ ชุดข้อมูลต่อไปนี้
{ name: "Los Angeles", state: "CA", country: "USA", size: 3970000 },
{ name: "Mexico City", state: null, country: "Mexico", size: 3970000.0 },
สามารถสร้างการเรียงสับเปลี่ยนของเอกสารทั้ง 2 ฉบับในชุดข้อมูลได้เนื่องจากเอกสารทั้ง 2 ฉบับมีsizeค่า3970000ที่เทียบเท่ากัน
ขั้นตอนการจัดเรียงหลายรายการ
เมื่อการค้นหามีขั้นตอนการจัดเรียงที่ต่อเนื่องกันหลายขั้นตอน เฉพาะขั้นตอนการจัดเรียงสุดท้ายเท่านั้นที่จะส่งผลต่อผลลัพธ์การค้นหา โปรดทราบว่าลักษณะการทำงานนี้แตกต่างจากลักษณะการทำงานของคําสั่ง orderBy ใน Core API
การเพิ่มประสิทธิภาพการจัดเรียง Top-N
เมื่อใช้ limit(...) หลังจาก sort ระบบอาจใช้การจัดเรียงแบบ Top-N
การเพิ่มประสิทธิภาพนี้จะจำกัดการใช้หน่วยความจำของขั้นตอนการจัดเรียงโดย
อนุญาตให้จัดเก็บเอกสารได้เพียง N รายการในแต่ละครั้งตามที่กำหนดโดย
limit(...) ซึ่งจะทำให้การจัดเรียงใช้หน่วยความจำอย่างมีประสิทธิภาพมากขึ้น
ค่า Null และค่าที่ไม่มี
หากฟิลด์ที่ระบุในการเรียงลำดับไม่มีอยู่ในเอกสาร ระบบจะจัดเรียงค่าของฟิลด์นั้นราวกับว่าค่าเป็น null ตัวอย่างเช่น การจัดเรียงเมืองตาม
stateของเมืองจากน้อยไปมากเทียบกับชุดข้อมูลต่อไปนี้
{ name: "Los Angeles", state: "CA", country: "USA", population: 3970000 },
{ name: "Mexico City", state: null, country: "Mexico", population: 9200000 },
{ name: "New York", state: "NY", country: "USA", population: 8530000 }
{ name: "San Francisco", state: "CA", country: "USA", population: 870000 },
{ name: "Toronto", country: "Canada", population: 2930000 },
จะให้ผลลัพธ์ต่อไปนี้ โดยเอกสาร "โตรอนโต" และเอกสาร "เม็กซิโกซิตี้" จะเรียงตามลำดับเป็น null และอยู่ก่อนเอกสารอื่นๆ
{ name: "Toronto", country: "Canada", population: 2930000 },
{ name: "Mexico City", state: null, country: "Mexico", population: 9200000 },
{ name: "Los Angeles", state: "CA", country: "USA", population: 3970000 },
{ name: "San Francisco", state: "CA", country: "USA", population: 870000 },
{ name: "New York", state: "NY", country: "USA", population: 8530000 }