Làm cách nào để sử dụng toán tử 'Không thích' trong MongoDB


98

Tôi có thể sử dụng LikeToán tử SQL bằng cách sử dụng pymongo,

db.test.find({'c':{'$regex':'ttt'}})

Nhưng làm thế nào tôi có thể sử dụng Not LikeOperator?

Tôi đã thử

db.test.find({'c':{'$not':{'$regex':'ttt'}})

nhưng có lỗi:

OperationFailure: $ not không thể có regex


1
Tôi biết điều này hơi muộn nhưng trong MongoDB 4.2 $not, $regextoán tử và kết hợp dường như hoạt động đối với tôi.
b00r00x0

Câu trả lời:


138

Từ các tài liệu :

Toán tử $ not không hỗ trợ các hoạt động với toán tử $ regex. Thay vào đó, hãy sử dụng // hoặc trong giao diện trình điều khiển của bạn, hãy sử dụng khả năng biểu thức chính quy của ngôn ngữ của bạn để tạo các đối tượng biểu thức chính quy. Hãy xem xét ví dụ sau sử dụng biểu thức đối sánh mẫu //:

db.inventory.find( { item: { $not: /^p.*/ } } )

CHỈNH SỬA (@idb Bentley):

{$regex: 'ttt'}thường tương đương với /ttt/trong mongodb, vì vậy truy vấn của bạn sẽ trở thành:

db.test.find({c: {$not: /ttt/}}

EDIT2 (@KyungHoon Kim):

Trong python , một trong những hoạt động dưới đây:

'c':{'$not':re.compile('ttt')}

2
Để rõ ràng, {$regex: 'ttt'}thường tương đương với /ttt/trong mongodb, vì vậy truy vấn của bạn sẽ trở thành db.test.find({c: {$not: /ttt/}}.
idbentley

@idb Bentley cảm ơn bạn. Tôi đã cập nhật câu trả lời của mình với sự làm rõ của bạn.
shx2

1
Cảm ơn bạn rất nhiều. Đối với những người khác, tôi đã sử dụng 'c':{'$not':re.compile('ttt')}. Tất nhiên, bạn cần phải nhập lại
KyungHoon Kim

Tuyệt quá. Tôi cũng đã thêm bình luận của bạn vào câu trả lời, cho hậu thế.
shx2

1
Điều này dường như cũng xảy ra với $ ne và $ regex. Bất cứ ai có thể xác nhận điều này, hoặc ít nhất là thêm vào nó?
DBrown

55

Bạn có thể làm với regex không chứa từ. Ngoài ra, bạn có thể sử dụng $options => icho trường hợp tìm kiếm không nhạy cảm.

Không chứa string

db.collection.find({name:{'$regex' : '^((?!string).)*$', '$options' : 'i'}})

Không phân biệt chữ hoa chữ thường chính xác string

db.collection.find({name:{'$regex' : '^string$', '$options' : 'i'}})

Bắt đầu với string

db.collection.find({name:{'$regex' : '^string', '$options' : 'i'}})

Kết thúc với string

db.collection.find({name:{'$regex' : 'string$', '$options' : 'i'}})

Chứa đựng string

db.collection.find({name:{'$regex' : 'string', '$options' : 'i'}})

Giữ cái này làm dấu trang và tham chiếu cho bất kỳ thay đổi nào khác mà bạn có thể cần. http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.