Khó hiểu với việc sử dụng mongodb(nodejs)



  • Em có sử dụng query mongo đại loại như:
    db.news().find({title : '/' + req.query.q + '/'}).toArray(callback); để lọc ra theo title có từ khóa với giá trị req.query.q
    Em chạy và test log thì các dự liệu chuyển đến mongo để lọc dữ liệu rất oke thế mà nó k hề có kết quả tương ứng.

    => Sau đó em thấy '/' + req.query.q + '/' sau chạy nó sẽ là chuỗi và có 2 dấu nháy đơn ( ' ) 2 đầu.
    Mà e test query phía command với 2 câu query:

    1. db.news.find({title: /Node/}).pretty()
    2. db.news.find({title: '/Node/'}).pretty(); // Có thêm nháy đơn 2 đầu.
      => Kết quả lại hoàn toàn khác nhau, cách query thứ 2 cũng như hiểu lỗi của e bên trên :(, sao nó lại thế các bác nhỉ?


  • @Tieu-dang-van đã nói trong Khó hiểu với việc sử dụng mongodb(nodejs):

    Em có sử dụng query mongo đại loại như:
    db.news().find({title : '/' + req.query.q + '/'}).toArray(callback); để lọc ra theo title có từ khóa với giá trị req.query.q
    Em chạy và test log thì các dự liệu chuyển đến mongo để lọc dữ liệu rất oke thế mà nó k hề có kết quả tương ứng.

    => Sau đó em thấy '/' + req.query.q + '/' sau chạy nó sẽ là chuỗi và có 2 dấu nháy đơn ( ' ) 2 đầu.
    Mà e test query phía command với 2 câu query:

    1. db.news.find({title: /Node/}).pretty()
    2. db.news.find({title: '/Node/'}).pretty(); // Có thêm nháy đơn 2 đầu.
      => Kết quả lại hoàn toàn khác nhau, cách query thứ 2 cũng như hiểu lỗi của e bên trên :(, sao nó lại thế các bác nhỉ?

    ở trường hợp 1 bạn tìm kiếm với regex cái thứ 2 là tìm kiếm với string . Khác nhau hoàn toàn mà



  • @Quốc-Cường đã nói trong Khó hiểu với việc sử dụng mongodb(nodejs):

    @Tieu-dang-van đã nói trong Khó hiểu với việc sử dụng mongodb(nodejs):

    Em có sử dụng query mongo đại loại như:
    db.news().find({title : '/' + req.query.q + '/'}).toArray(callback); để lọc ra theo title có từ khóa với giá trị req.query.q
    Em chạy và test log thì các dự liệu chuyển đến mongo để lọc dữ liệu rất oke thế mà nó k hề có kết quả tương ứng.

    => Sau đó em thấy '/' + req.query.q + '/' sau chạy nó sẽ là chuỗi và có 2 dấu nháy đơn ( ' ) 2 đầu.
    Mà e test query phía command với 2 câu query:

    1. db.news.find({title: /Node/}).pretty()
    2. db.news.find({title: '/Node/'}).pretty(); // Có thêm nháy đơn 2 đầu.
      => Kết quả lại hoàn toàn khác nhau, cách query thứ 2 cũng như hiểu lỗi của e bên trên :(, sao nó lại thế các bác nhỉ?

    ở trường hợp 1 bạn tìm kiếm với regex cái thứ 2 là tìm kiếm với string . Khác nhau hoàn toàn mà
    Giờ em muốn tìm kiếm với regex thì viết thế nào anh nhỉ?



  • Anh không rõ ý của em lắm. Nếu em muốn build 1 cái regex từ 1 string em có thể dùng
    new RegExp(<string>,<flags>)



  • @Quốc-Cường
    Đại loại giờ em muốn lệnh query giống như $db.news.find({title: '/' + $key + '/'}) kiểu regex ấy ạ.



  • Em có thể dùng 1 trong 2 cách
    title : new RegExp("<đoạn string>")
    hoặc
    title : { $regex : < cú pháp regex> }



  • Có thể viết thế này:

    User.find({display_name: {$regex: 'Kim tiêm', $options: 'iu'}}).toArray(function(err, result){
        // use result
    });
    

    Mình thường sử dụng 2 options cho regex là /ui, (giúp tìm kiếm giá trị có unicode và được viết hoa hoặc viết thường).

    Bạn có thể xem các options và cách viết $regex tại đây: https://docs.mongodb.com/manual/reference/operator/query/regex/


Log in to reply