MongoDB wybierz gdzie w tablicy _id?


91

w mongo db można wybrać dokumenty kolekcji takie jak w SQL:

SELECT * FROM collection WHERE _id IN (1,2,3,4);

lub jeśli mam _id arrayi muszę wybierać jeden po drugim, a następnie ponownie komponować array/objectwyniki?

Odpowiedzi:


166

Łatwy :)

db.collection.find( { _id : { $in : [1,2,3,4] } } );

zaczerpnięte z: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in


Czy nadal odnosimy korzyści z indeksowania? Identyfikatory w takim przypadku są przekazywane jako zwykłe ciągi znaków ...
Rafal Pastuszak

2
Ty robisz. Jednak złożoność czasowa jest liniowa (n), a nie logarytmiczna / stała. Bez indeksu byłoby to n ^ 2.
Petr Brazdil

Czy nie jest to, O(log(n) * m)gdzie njest rozmiar kolekcji i mczy liczba przekazanych identyfikatorów?
Guig

8
Musisz użyć funkcji ObjectId, jeśli „_id” jest obiektem ID - {_id: {$ in: [ObjectId ("5a633609670aeb6f93b88b23")]}}
Pax Beach

5

lista jest tablicą identyfikatorów

Na tej liście kodów znajduje się tablica identyfikatorów w kolekcji użytkownika

var list = ["5883d387971bb840b7399130","5883d389971bb840b7399131","5883d38a971bb840b7399132"]

    .find({ _id: {$in : list}})

4
Kod nie działa. Wydaje się, że trzeba ustawić identyfikatory jako ObjectId („5883d387971bb840b7399130”)
Pax Beach

0

Ponieważ mongodb używa bsoni dla bson jest ważnymi typami atrybutów. i ponieważ _idto ObjectIdnależy użyć tak:

db.collection.find( { _id : { $in : [ObjectId('1'),ObjectId('2')] } } );

i w mongodb compassużyciu w ten sposób:

{ "_id" : { $in : [ObjectId('1'),ObjectId('2')] } }

Uwaga: objectId w łańcuchu ma 24długość.


0

jeśli chcesz znaleźć według użytkownika, a także według innego pola, na przykład warunkowo, możesz to łatwo zrobić jak poniżej z operatorem spreadu i potrójnego, używając aggregateimatch

 const p_id = patient_id;
    let fetchingReports = await Reports.aggregate([
      ...(p_id
        ? [
            {
              $match: {
                createdBy: mongoose.Types.ObjectId(id),
                patient_id: p_id,
              },
            },
          ]
        : [
            {
              $match: {
                createdBy: mongoose.Types.ObjectId(id),
              },
            },
        

-4

Nie jest to związane z zapytaniem mongo. Znałem SQL i używałem Studio3T IDE do wysyłania zapytań do bazy danych mongo za pomocą SQL. Jeśli jesteś podobny do mnie, chcę zwrócić uwagę, że wartość id musi zostać wpisana na maszynie. Więc zapytanie będzie wyglądać następująco:

SELECT _id from <collectionName>
WHERE _id = ObjectId("5883d387971bb840b7399130");

2
To w ogóle nie rozwiązuje problemu.
loctrice

Nie odpowiada, zgodził się. Może pomóc w niektórych IDE, takich jak Studio3T, które pozwalają na interakcję z mongoDB za pomocą SQL. Tam odpowiedź ma zastosowanie. Należy również podkreślić, że nawet w tym przypadku _id musi być rzutowany.
sourabhxiii

1
chodzi o mongodb
Rohit
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.