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/



  • Mình dung regrex để tìm kiếm có dấu nhưng lại không được, mình không biết tại sao nữa. Có bạn nào biết cách tìm có dấu trong mongodb thì chỉ mình với. cảm ơn.



  • Nguyen (Rodgers) Hien.
    Sent from Wood-PC.

    0


  • This post is deleted!


  • @Nguyen-Hien mình cũng có thử dùng full-text-search rồi nhưng mà nó chỉ tìm được theo cụm à, ví dụ bảng product của mình có name là : "Sản phẩm A", thì mình gõ chữ san, hay pham thì nó tìm được, còn ghi 1 chữ ví dụ như s hoặc a hoặc n thì lại không tìm được.



  • @nguyễn-văn-khánh Bạn thử dùng cái này xem

    Collection.find({field: new RegExp(keyword, 'i')})
    

    Nguyen (Rodgers) Hien.
    Sent from Wood-PC.

    0


  • @Nguyen-Hien regex thì lại tìm có dấu không được bạn ạ :((


  • Global Moderator

    @nguyễn-văn-khánh Theo mình bạn nên kết hợp 2 phương án: Tìm chính xác trước (dùng regex), sau đó tìm xấp xỉ full-text search để có kết quả như mong đợi. Có thể cần loại ra các kết quả tìm kiếm trùng lặp :)

    Thêm nữa là regex tìm được có dấu bạn nhé. Bạn test lại xem :D



  • @Vũ said in Khó hiểu với việc sử dụng mongodb(nodejs):

    .

    Bạn có ví dụ về phần tìm có dấu bằng regrex được không. cảm ơn bạn.


  • Global Moderator

    @nguyễn-văn-khánh Bạn có thể test trên Robomongo bằng lệnh đơn giản như thế này: db.users.find({"hoVaTen": /Vũ/}) để tìm tất cả ông có họ tên chứa từ . Ví dụ nodejs thì các bạn trên đã đưa ra, bạn tham khảo ở trên nhé.


Log in to reply