Mongodb chuyển đổi mảng thành chuỗi
Tôi đang cố lấy danh sách thành viên. Trong mongodb mảng là một danh sách các ObjectIds. Nhưng khi tôi chạy truy vấn thì không tìm thấy gì. Tôi biết ID thực tế là hợp lệ. Có thể có một số người dùng đã bị xóa, nhưng hầu hết trong số họ vẫn tồn tại. Show Truy vấn này hoạt động, nhưng truy vấn đó dành cho một người dùng và tôi có thể chỉ định truy vấn đó phải được coi là $oid MongoDB cung cấp $lookup để tham gia bộ sưu tập với các bộ sưu tập khác. Ví dụ: giả sử khách hàng có danh sách đơn đặt hàng và chúng tôi muốn biết ánh xạ bộ sưu tập của khách hàng tới sản phẩm mà khách hàng đã đặt hàng Hãy lấy một bộ sưu tập khách hàng Ở đây chúng tôi có các đơn đặt hàng với id của bộ sưu tập đơn hàng và chúng tôi sẽ ánh xạ khóa đơn hàng tới bộ sưu tập đơn hàng db.customers.insert([ { "_id": 1, "name": "Jason", "orders": [1,2] }, { "_id": 2, "name": "Drake", "orders": [2,3] }, { "_id": 3, "name": "John", "orders":[1] } ]) Bây giờ chúng ta hãy lấy một bộ sưu tập đơn đặt hàng db.orders.insert([ { "_id": 1, "productName": "Ipad", "price": 20 }, { "_id": 2, "productName": "Laptop", "price": 10 }, { "_id": 3, "productName": "Computer Accessories", "price":40 } ]) Bây giờ chúng tôi sử dụng $lookup để tham gia các bộ sưu tập trên. Hãy xem trong hành động db.customers.aggregate([ { $project: { _id: 1, name: 1, orders: 1 } }, { $lookup: { from: "orders", localField: "orders", foreignField: "_id", as: "orders" } } ]) Bấm chạy để xem kết quả Như bạn có thể thấy ở trên cách các đơn đặt hàng từ bộ sưu tập khách hàng được ánh xạ tới bộ sưu tập đơn đặt hàng bằng cách sử dụng _id _id chúng tôi có trong mảng đơn đặt hàng của khách hàng là _id tùy chỉnh không phải là Id được tạo tự động duy nhất của mongodb Điều gì sẽ xảy ra nếu họ có mảng Id được tạo tự động. Hãy xem một ví dụ db.customers.insert( [ { "_id": 1, "name": "Jason", "orders": [ "5e671cc4a5c7ed3fa4e2226a", "5f5cf89f05f4a755e8570378" ] }, { "_id": 2, "name": "Drake", "orders": [ "5dd4ec16661c583dd88815e5", "5e671cc4a5c7ed3fa4e2226a" ] }, { "_id": 3, "name": "John", "orders": [ "5dd4ec16661c583dd88815e5" ] } ] ) Thu thập đơn đặt hàng với Id đối tượng được tạo tự động db.orders.insert( [ { "_id": ObjectId("5e671cc4a5c7ed3fa4e2226a"), "productName": "Ipad", "price": 20 }, { "_id": ObjectId("5f5cf89f05f4a755e8570378"), "productName": "Laptop", "price": 10 }, { "_id": ObjectId("5dd4ec16661c583dd88815e5"), "productName": "Computer Accessories", "price": 40 } ] ) Sử dụng tra cứu $ ngay bây giờ để kiểm tra xem nó có hoạt động không db.customers.aggregate([ { $project: { _id: 1, name: 1, orders: 1 } }, { $lookup: { from: "orders", localField: "orders", foreignField: "_id", as: "orders" } } ]) Như bạn có thể thấy nó không hoạt động vì bộ sưu tập đơn đặt hàng của chúng tôi có _id là ObjectId và bộ sưu tập khách hàng có mảng id chuỗi nhưng không phải là ObjectId Trên thực tế, db.orders.insert([ { "_id": 1, "productName": "Ipad", "price": 20 }, { "_id": 2, "productName": "Laptop", "price": 10 }, { "_id": 3, "productName": "Computer Accessories", "price":40 } ])26 luôn trả về trường mới ở dạng mảng. Vì vậy, để chọn trường từ mảng đó, bạn cần sử dụng db.orders.insert([ { "_id": 1, "productName": "Ipad", "price": 20 }, { "_id": 2, "productName": "Laptop", "price": 10 }, { "_id": 3, "productName": "Computer Accessories", "price":40 } ])27 hoặc có thể db.orders.insert([ { "_id": 1, "productName": "Ipad", "price": 20 }, { "_id": 2, "productName": "Laptop", "price": 10 }, { "_id": 3, "productName": "Computer Accessories", "price":40 } ])28 để chọn phần tử thứ 0 Đối số có thể là bất kỳ biểu thức hợp lệ nào phân giải thành một trong các số hoặc chuỗi định danh sau Mã định danh chuỗi Định danh số ghi chú "kép" 1 Để biết thêm thông tin về chuyển đổi thành gấp đôi, hãy xem Chuyển đổi thành gấp đôi. "sợi dây" 2 Để biết thêm thông tin về chuyển đổi thành chuỗi, hãy xem Chuyển đổi thành Chuỗi. "ID đối tượng" 7 Để biết thêm thông tin về chuyển đổi thành objectId, hãy xem Chuyển đổi thành ObjectId. "bool" 8 Để biết thêm thông tin về chuyển đổi sang boolean, hãy xem Chuyển đổi sang Boolean. "ngày" 9 Để biết thêm thông tin về chuyển đổi sang ngày, hãy xem Chuyển đổi sang ngày. "int" 16 Để biết thêm thông tin về chuyển đổi thành số nguyên, hãy xem Chuyển đổi thành số nguyên. "Dài" 18 Để biết thêm thông tin về chuyển đổi thành dài, hãy xem Chuyển đổi thành dài. "số thập phân" 19 Để biết thêm thông tin về chuyển đổi sang số thập phân, hãy xem Chuyển đổi sang số thập phân.
Không bắt buộc. Giá trị trả về khi gặp lỗi trong quá trình chuyển đổi, bao gồm cả chuyển đổi loại không được hỗ trợ. Các đối số có thể là bất kỳ biểu thức hợp lệ nào Nếu không được chỉ định, thao tác sẽ đưa ra lỗi khi gặp lỗi và dừng lại
Không bắt buộc. Giá trị trả về nếu Nếu không được chỉ định, 1 là null hoặc bị thiếu. Ngoài
Hành viChuyển đổi thành BooleanBảng sau liệt kê các loại đầu vào có thể được chuyển đổi thành boolean Kiểu đầu vào Hành vi Boolean Không ra đâu. Trả về giá trị boolean Kép Trả về true nếu không bằng không Trả về false nếu không Số thập phân Trả về true nếu không bằng không Trả về false nếu không số nguyên Trả về true nếu không bằng không Trả về false nếu không Dài Trả về true nếu không bằng không Trả về false nếu không ID đối tượng Trả về đúng Sợi dây Trả về đúng Ngày Trả về đúng dấu thời gian Trả về đúng Bảng sau đây liệt kê một số chuyển đổi sang ví dụ boolean Thí dụ Kết quả
thật
sai
thật
thật
sai
thật
thật
thật
thật
thật
vô giá trị MẹoXem thêm 9Chuyển đổi thành số nguyênBảng sau liệt kê các loại đầu vào có thể được chuyển đổi thành số nguyên Kiểu đầu vào Hành vi Boolean Trả về Trả về db.customers.aggregate([ { $project: { _id: 1, name: 1, orders: 1 } }, { $lookup: { from: "orders", localField: "orders", foreignField: "_id", as: "orders" } } ])80 cho db.customers.aggregate([ { $project: { _id: 1, name: 1, orders: 1 } }, { $lookup: { from: "orders", localField: "orders", foreignField: "_id", as: "orders" } } ])81 Kép Trả về giá trị bị cắt bớt Giá trị gấp đôi bị cắt ngắn phải nằm trong giá trị tối thiểu và tối đa cho một số nguyên Bạn không thể chuyển đổi một giá trị kép có giá trị bị cắt bớt nhỏ hơn giá trị số nguyên tối thiểu hoặc lớn hơn giá trị số nguyên tối đa Số thập phân Trả về giá trị bị cắt bớt Giá trị thập phân bị cắt ngắn phải nằm trong giá trị tối thiểu và tối đa cho một số nguyên Bạn không thể chuyển đổi giá trị thập phân có giá trị bị cắt bớt nhỏ hơn giá trị số nguyên tối thiểu hoặc lớn hơn giá trị số nguyên tối đa số nguyên Không ra đâu. Trả về giá trị số nguyên Dài Trả về giá trị dài dưới dạng số nguyên Giá trị dài phải nằm trong giá trị tối thiểu và tối đa cho một số nguyên Bạn không thể chuyển đổi một giá trị dài nhỏ hơn giá trị số nguyên tối thiểu hoặc lớn hơn giá trị số nguyên tối đa Sợi dây Trả về giá trị số của chuỗi dưới dạng số nguyên Giá trị chuỗi phải là số nguyên cơ số 10 (e. g. Bạn không thể chuyển đổi giá trị chuỗi của số thực hoặc số thập phân hoặc số không phải cơ số 10 (e. g. db.customers.aggregate([ { $project: { _id: 1, name: 1, orders: 1 } }, { $lookup: { from: "orders", localField: "orders", foreignField: "_id", as: "orders" } } ])84, db.customers.aggregate([ { $project: { _id: 1, name: 1, orders: 1 } }, { $lookup: { from: "orders", localField: "orders", foreignField: "_id", as: "orders" } } ])85) hoặc giá trị nằm ngoài giá trị tối thiểu và tối đa cho một số nguyên Bảng sau đây liệt kê một số ví dụ chuyển đổi sang số nguyên Thí dụ Kết quả
1
0
1
5
Lỗi
5000
Lỗi
-2
Lỗi
vô giá trị MẹoXem thêmNhà điều hành db.orders.insert([ { "_id": 1, "productName": "Ipad", "price": 20 }, { "_id": 2, "productName": "Laptop", "price": 10 }, { "_id": 3, "productName": "Computer Accessories", "price":40 } ])33 Chuyển đổi thành số thập phânBảng sau liệt kê các loại đầu vào có thể được chuyển đổi thành số thập phân Kiểu đầu vào Hành vi Boolean Trả về Trả về db.customers.aggregate([ { $project: { _id: 1, name: 1, orders: 1 } }, { $lookup: { from: "orders", localField: "orders", foreignField: "_id", as: "orders" } } ])89 cho db.customers.aggregate([ { $project: { _id: 1, name: 1, orders: 1 } }, { $lookup: { from: "orders", localField: "orders", foreignField: "_id", as: "orders" } } ])81 Kép Trả về giá trị gấp đôi dưới dạng số thập phân Số thập phân Không ra đâu. Trả về số thập phân số nguyên Trả về giá trị int dưới dạng số thập phân Dài Trả về giá trị dài dưới dạng số thập phân Sợi dây Trả về giá trị số của chuỗi dưới dạng số thập phân Giá trị chuỗi phải là giá trị số cơ số 10 (e. g. Bạn không thể chuyển đổi một giá trị chuỗi của một số không phải cơ số 10 (e. g. db.customers.aggregate([ { $project: { _id: 1, name: 1, orders: 1 } }, { $lookup: { from: "orders", localField: "orders", foreignField: "_id", as: "orders" } } ])85) Ngày Trả về số mili giây kể từ kỷ nguyên tương ứng với giá trị ngày Bảng sau đây liệt kê một số ví dụ chuyển đổi sang số thập phân Thí dụ Kết quả
Thập phân128("1")
Thập phân128("0")
Thập phân128("2. 50000000000000")
Thập phân128("5")
Thập phân128("10000")
Thập phân128("-5. 5")
Thập phân128("1522039108044") MẹoXem thêmdb.orders.insert([ { "_id": 1, "productName": "Ipad", "price": 20 }, { "_id": 2, "productName": "Laptop", "price": 10 }, { "_id": 3, "productName": "Computer Accessories", "price":40 } ])31 Chuyển đổi thành DoubleBảng sau đây liệt kê các loại đầu vào có thể được chuyển đổi thành kiểu kép Kiểu đầu vào Hành vi Boolean Trả về NumberDouble(0) cho Trả về NumberDouble(1) cho db.customers.aggregate([ { $project: { _id: 1, name: 1, orders: 1 } }, { $lookup: { from: "orders", localField: "orders", foreignField: "_id", as: "orders" } } ])81 Kép Không ra đâu. Trả về gấp đôi Số thập phân Trả về giá trị thập phân dưới dạng gấp đôi Giá trị thập phân phải nằm trong giá trị tối thiểu và tối đa cho giá trị gấp đôi Bạn không thể chuyển đổi giá trị thập phân có giá trị nhỏ hơn giá trị kép tối thiểu hoặc lớn hơn giá trị kép tối đa số nguyên Trả về giá trị int dưới dạng gấp đôi Dài Trả về giá trị dài dưới dạng gấp đôi Sợi dây Trả về giá trị số của chuỗi dưới dạng gấp đôi Giá trị chuỗi phải là giá trị số cơ số 10 (e. g. Bạn không thể chuyển đổi một giá trị chuỗi của một số không phải cơ số 10 (e. g. db.customers.aggregate([ { $project: { _id: 1, name: 1, orders: 1 } }, { $lookup: { from: "orders", localField: "orders", foreignField: "_id", as: "orders" } } ])85) hoặc một giá trị nằm ngoài giá trị tối thiểu và tối đa cho giá trị gấp đôi Ngày Trả về số mili giây kể từ kỷ nguyên tương ứng với giá trị ngày Bảng sau đây liệt kê một số ví dụ chuyển đổi sang gấp đôi Thí dụ Kết quả
1
0
2. 5
5
10000
-5. 5
50000000000
1522039108044 MẹoXem thêmdb.orders.insert([ { "_id": 1, "productName": "Ipad", "price": 20 }, { "_id": 2, "productName": "Laptop", "price": 10 }, { "_id": 3, "productName": "Computer Accessories", "price":40 } ])32 Chuyển đổi thành LongBảng sau liệt kê các loại đầu vào có thể được chuyển đổi thành dạng dài Kiểu đầu vào Hành vi Boolean Trả về Trả về db.customers.aggregate([ { $project: { _id: 1, name: 1, orders: 1 } }, { $lookup: { from: "orders", localField: "orders", foreignField: "_id", as: "orders" } } ])80 cho db.customers.aggregate([ { $project: { _id: 1, name: 1, orders: 1 } }, { $lookup: { from: "orders", localField: "orders", foreignField: "_id", as: "orders" } } ])81 Kép Trả về giá trị bị cắt bớt Giá trị gấp đôi bị cắt ngắn phải nằm trong giá trị tối thiểu và tối đa trong một thời gian dài Bạn không thể chuyển đổi một giá trị kép có giá trị bị cắt nhỏ hơn giá trị dài tối thiểu hoặc lớn hơn giá trị dài tối đa Số thập phân Trả về giá trị bị cắt bớt Giá trị thập phân bị cắt ngắn phải nằm trong giá trị tối thiểu và tối đa trong một thời gian dài Bạn không thể chuyển đổi giá trị thập phân có giá trị bị cắt nhỏ hơn giá trị dài tối thiểu hoặc lớn hơn giá trị dài tối đa số nguyên Trả về giá trị int dưới dạng long Dài Không ra đâu. Trả về giá trị dài Sợi dây Trả về giá trị số của chuỗi Giá trị chuỗi phải có độ dài cơ số 10 (e. g. Bạn không thể chuyển đổi giá trị chuỗi của số thực hoặc số thập phân hoặc số không phải cơ số 10 (e. g. db.customers.aggregate([ { $project: { _id: 1, name: 1, orders: 1 } }, { $lookup: { from: "orders", localField: "orders", foreignField: "_id", as: "orders" } } ])84, db.customers.aggregate([ { $project: { _id: 1, name: 1, orders: 1 } }, { $lookup: { from: "orders", localField: "orders", foreignField: "_id", as: "orders" } } ])85) hoặc giá trị nằm ngoài giá trị tối thiểu và tối đa trong một thời gian dài Ngày Chuyển đổi Ngày thành số mili giây kể từ kỷ nguyên Bảng sau đây liệt kê một số chuyển đổi thành các ví dụ dài Thí dụ Kết quả
Dài("1")
Dài("0")
Dài("2")
Dài("5")
Lỗi
Dài("8")
Dài("1522039108044")
Dài("-2")
Lỗi
vô giá trị MẹoXem thêmdb.orders.insert([ { "_id": 1, "productName": "Ipad", "price": 20 }, { "_id": 2, "productName": "Laptop", "price": 10 }, { "_id": 3, "productName": "Computer Accessories", "price":40 } ])34 Chuyển đổi thành một ngàyBảng sau đây liệt kê các loại đầu vào có thể được chuyển đổi thành ngày tháng Kiểu đầu vào Hành vi Kép Trả về một ngày tương ứng với số mili giây được biểu thị bằng giá trị kép bị cắt bớt Số dương tương ứng với số mili giây kể từ ngày 1 tháng 1 năm 1970 Số âm tương ứng với số mili giây trước ngày 1 tháng 1 năm 1970 Số thập phân Trả về một ngày tương ứng với số mili giây được biểu thị bằng giá trị thập phân bị cắt ngắn Số dương tương ứng với số mili giây kể từ ngày 1 tháng 1 năm 1970 Số âm tương ứng với số mili giây trước ngày 1 tháng 1 năm 1970 Dài Trả về một ngày tương ứng với số mili giây được biểu thị bằng giá trị dài Số dương tương ứng với số mili giây kể từ ngày 1 tháng 1 năm 1970 Số âm tương ứng với số mili giây trước ngày 1 tháng 1 năm 1970 Sợi dây Trả về một ngày tương ứng với chuỗi ngày Chuỗi phải là một chuỗi ngày hợp lệ, chẳng hạn như "2018-03-03" "2018-03-03T12. 00. 00Z" "2018-03-03T12. 00. 00+0500" ID đối tượng Trả về một ngày tương ứng với dấu thời gian của ObjectId dấu thời gian Trả về một ngày tương ứng với dấu thời gian Bảng sau đây liệt kê một số ví dụ chuyển đổi sang ngày Thí dụ Kết quả
ISODate("1973-10-20T21. 20. 00. 000Z")
ISODate("2009-09-19T14. 53. 56. 000Z")
ISODate("2004-11-09T11. 33. 20. 000Z")
ISODate("1935-02-22T12. 26. 40. 000Z")
ISODate("2018-03-27T04. 08. 58. 000Z")
ISODate("2018-03-03T00. 00. 00. 000Z")
ISODate("2018-03-20T06. 00. 06. 000Z")
Lỗi
ISODate("2021-11-23T17. 21. 58. 000Z") MẹoXem thêm
Chuyển đổi thành ObjectIdBảng sau liệt kê các loại đầu vào có thể được chuyển đổi thành ObjectId Kiểu đầu vào Hành vi Sợi dây Trả về một ObjectId cho chuỗi thập lục phân có độ dài 24 Bạn không thể chuyển đổi giá trị chuỗi không phải là chuỗi thập lục phân có độ dài 24 Bảng sau đây liệt kê một số ví dụ chuyển đổi sang ngày Thí dụ Kết quả
ObjectId("5ab9cbfa31c2ab715d42129e")
Lỗi MẹoXem thêmNhà điều hành db.orders.insert([ { "_id": 1, "productName": "Ipad", "price": 20 }, { "_id": 2, "productName": "Laptop", "price": 10 }, { "_id": 3, "productName": "Computer Accessories", "price":40 } ])35 Chuyển đổi thành ChuỗiBảng sau liệt kê các loại đầu vào có thể được chuyển đổi thành chuỗi Kiểu đầu vào Hành vi Boolean Trả về giá trị boolean dưới dạng chuỗi Kép Trả về giá trị kép dưới dạng chuỗi Số thập phân Trả về giá trị thập phân dưới dạng chuỗi số nguyên Trả về giá trị số nguyên dưới dạng chuỗi Dài Trả về giá trị dài dưới dạng chuỗi ID đối tượng Trả về giá trị ObjectId dưới dạng chuỗi thập lục phân Sợi dây Không ra đâu. Trả về giá trị chuỗi Ngày Trả về ngày dưới dạng chuỗi Bảng sau đây liệt kê một số ví dụ chuyển đổi thành chuỗi Thí dụ Kết quả
"thật"
"sai"
"2. 5"
"2"
"1000"
"5ab9c3da31c2ab715d421285"
"2018-03-27T16. 58. 51. 538Z" MẹoXem thêm
Thí dụTạo bộ sưu tập db.customers.aggregate([ { $project: { _id: 1, name: 1, orders: 1 } }, { $lookup: { from: "orders", localField: "orders", foreignField: "_id", as: "orders" } } ])025 với các tài liệu sau 5Hoạt động tổng hợp sau đây trên bộ sưu tập db.customers.aggregate([ { $project: { _id: 1, name: 1, orders: 1 } }, { $lookup: { from: "orders", localField: "orders", foreignField: "_id", as: "orders" } } ])025 chuyển đổi db.customers.aggregate([ { $project: { _id: 1, name: 1, orders: 1 } }, { $lookup: { from: "orders", localField: "orders", foreignField: "_id", as: "orders" } } ])027 thành số thập phân |