Trường hợp
Vì vậy, tôi đang cố gắng thực thi một truy vấn tới cơ sở dữ liệu Mongo bằng Java. Trong shell, truy vấn tôi đang nói đến trông như thế này:
db.myCollection.find({ "array" : { "$in" : [ "foo" , "bar" ]}});
Truy vấn được kết hợp với nhau trong Java như sau:
DBCursor cursor = myCollection.find(new BasicDBObject("array", new BasicDBObject("$in", items)));
Ở đây, các mục biến được định nghĩa là một Chuỗi [], được chuyển từ một nơi khác. Nó có thể chứa bất kỳ giá trị nào, nhưng trong ví dụ này, nó chứa các phần tử sau:
"foo", "bar";
Vấn đề
Đây là nơi mà vấn đề bắt đầu. Kêu gọi
cursor.getQuery()
trả lại
{ "array" : { "$in" : [ "\"foo\"" , "\"bar\"" ]}}
mà sẽ không trả lại bất kỳ kết quả nào. Như bạn có thể thấy, trình điều khiển Mongo cho Java đã thêm dấu ngoặc kép và thoát khỏi chúng.
Tôi đã cố gắng
Sao chép mảng và đảm bảo rằng mọi thứ đã được cắt bỏ. Sau đó chuyển nó vào truy vấn.
String[] test = new String[items.length]; for(int i = 0; i < items.length; i++){ test[i] = items[i].trim(); }
Không hoạt động.
Bây giờ đây là một số phép thuật thực sự cho các bạn! Tôi đã thử khởi tạo chuỗi ngay trước truy vấn như thế này:
String[] items = new String[]{ "foo", "bar" };
Khi tôi khởi tạo nó như vậy, Mongo không thoát khỏi dấu ngoặc kép và truy vấn hoạt động.
Vì vậy, tôi muốn biết đây là loại mánh khóe gì. Và làm thế nào tôi có thể giải quyết điều này.
Cảm ơn tất cả các bạn đã đọc!