MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Trong MongoDB, cách thực hiện truy vấn dựa trên việc một trường chuỗi có chứa một trường chuỗi khác không

Bạn có thể thực hiện việc này với $where bằng cách tạo RegExp cho string1 và sau đó kiểm tra nó với string2 :

db.test.find({$where: 'RegExp(this.string1).test(this.string2)'})

Tuy nhiên, nếu bạn đang sử dụng MongoDB 3.4+, bạn có thể thực hiện việc này hiệu quả hơn bằng cách sử dụng $indexOfCP toán tử tổng hợp:

db.test.aggregate([
    // Project  the index of where string1 appears in string2, along with the original doc.
    {$project: {foundIndex: {$indexOfCP: ['$string2', '$string1']}, doc: '$$ROOT'}},
    // Filter out the docs where the string wasn't found
    {$match: {foundIndex: {$ne: -1}}},
    // Promote the original doc back to the root
    {$replaceRoot: {newRoot: '$doc'}}
])

Hoặc trực tiếp hơn bằng cách sử dụng $redact :

db.test.aggregate([
    {$redact: {
        $cond: {
            if: { $eq: [{$indexOfCP: ['$string2', '$string1']}, -1]},
            then: '$$PRUNE',
            else: '$$KEEP'
        }
    }}
])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm thế nào để khớp chính xác toàn bộ tài liệu?

  2. Giới hạn sử dụng RAM MongoDB

  3. truy vấn mongodb:$ size với $ gt luôn trả về 0

  4. ValueError:<Quá nhiều giá trị để giải nén>

  5. mongoose node.js, truy vấn với $ lt và $ gt không hoạt động