Helpex - Trao đổi & giúp đỡ Đăng nhập
3

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

  1. 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.

  2. 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!

3 hữu ích 3 bình luận 3.0k xem chia sẻ
3

Bạn không nên cố gắng ngăn trình điều khiển Mongo thoát khỏi chuỗi ký tự. Việc thoát được thực hiện để đảm bảo rằng json hoặc bson cuối cùng là chính xác về mặt cú pháp. AFAIK, không thể thay đổi cách trình điều khiển Mongo định dạng thông báo cuối cùng tới máy chủ, điều này là hợp lý vì nó đang triển khai đúng giao thức máy chủ.

Trong trường hợp cụ thể của bạn, ý định của bạn là sử dụng xâu foobar, tuy nhiên dữ liệu của bạn chứa chữ "foo""bar"thay vào đó, gây ra những vấn đề logic bạn đang quan sát.

3 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ java arrays json mongodb escaping , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading