MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak uzyskać wszystkie wartości, które zawierają część ciągu za pomocą wyszukiwania mangusty?

Prawie sam odpowiedziałeś na to w swoich tagach. MongoDB ma $regex operator, który umożliwia przesłanie wyrażenia regularnego jako zapytania. Więc pytasz o ciągi zawierające „Alex”, robisz to:

Books.find(
    { "authors": { "$regex": "Alex", "$options": "i" } },
    function(err,docs) { 
    } 
);

Możesz również to zrobić:

Books.find(
    { "authors": /Alex/i }, 
    function(err,docs) { 

    }
);

Oba są prawidłowe i różnią się od sposobu, w jaki próbowałeś, we właściwej obsługiwanej składni, jak pokazano w dokumentacji.

Ale oczywiście, jeśli rzeczywiście pytasz „jak uzyskać wyniki „tablicy” tylko dla tych, które pasują do „Alex” gdzieś w ciągu? to jest trochę inne.

Złożone dopasowanie dla więcej niż jednego element tablicy jest domeną struktury agregacji (lub ewentualnie mapReduce, ale jest to znacznie wolniejsze ), gdzie trzeba "filtrować" zawartość tablicy.

Zaczynasz od tego samego. Kluczem tutaj jest $unwind do "denormalizacji" zawartości tablicy, aby móc właściwie "filtrować" jako pojedyncze dokumenty. Następnie zrekonstruuj tablicę z „pasującymi” dokumentami.

Books.aggregate(
    [
        // Match first to reduce documents to those where the array contains the match
        { "$match": {
            "authors": { "$regex": "Alex", "$options": i }
        }},

        // Unwind to "de-normalize" the document per array element
        { "$unwind": "$authors" },

        // Now filter those document for the elements that match
        { "$match": {
            "authors": { "$regex": "Alex", "$options": i }
        }},

        // Group back as an array with only the matching elements
        { "$group": {
            "_id": "$_id",
            "title": { "$first": "$title" },
            "authors": { "$push": "$authors" },
            "subjects": { "$first": "$subjects" }
        }}
    ],
    function(err,results) {

    }
)


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. $project:Czy można uzyskać dostęp do właściwości wyniku wyrażenia tylko w jednym etapie?

  2. Połączenie MongoDb odrzucone

  3. MongoDB $isoDayOfWeek

  4. Jak zwrócić tylko wartość w MongoDB?

  5. Jak zarządzać dokumentami w MongoDB