MongoDB sélectionnez où dans le tableau de _id?


91

est possible dans mongo db pour sélectionner les documents de la collection comme en SQL:

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

ou si j'ai un _id arrayje dois sélectionner un par un puis recomposer les array/objectrésultats?

Réponses:


166

Facile :)

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

extrait de: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in


Avons-nous encore des avantages de l'indexation? Les identifiants dans ce cas sont transmis sous forme de chaînes simples ...
Rafal Pastuszak

2
Tu fais. Cependant, la complexité temporelle est linéaire (n) et non logarithmique / constante. Sans index, ce serait n ^ 2.
Petr Brazdil

N'est-ce pas O(log(n) * m)où se ntrouve la taille de la collection et mle nombre d'identifiants passés?
Guig

8
Vous devez utiliser la fonction ObjectId, si "_id" est l'objet ID - {_id: {$ in: [ObjectId ("5a633609670aeb6f93b88b23")]}}
Pax Beach

5

list est un tableau d'identifiants

Dans cette liste de codes se trouve le tableau des identifiants dans la collection d'utilisateurs

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

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

4
Le code ne fonctionne pas. Il semble devoir définir des ID comme ObjectId ("5883d387971bb840b7399130")
Pax Beach

0

Parce que mongodb utilise bsonet pour bson est des types d'attributs importants. et parce _idest que ObjectIdvous devez utiliser comme ceci:

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

et en cours d' mongodb compassutilisation comme ceci:

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

Remarque: objectId dans la chaîne a une 24longueur.


0

si vous voulez rechercher par utilisateur et aussi par un autre champ comme conditionnellement, vous pouvez facilement le faire comme ci-dessous avec un opérateur étalé et ternaire en utilisant aggregateetmatch

 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

Ceci n'est pas lié à la requête mongo. J'étais familier avec SQL et j'ai utilisé Studio3T IDE pour interroger une base de données mongo en utilisant SQL. Si vous êtes comme moi, je tiens à souligner que la valeur de l'identifiant doit être transtypée. La requête ressemblera donc à:

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

2
Cela ne répond pas du tout à la question.
loctrice le

Ne répond pas, d'accord. Cela peut aider avec certains IDE comme Studio3T, qui vous permettent d'interagir avec mongoDB en utilisant SQL. Là, la réponse a une application. Il faut également souligner que même dans ce cas, le _id doit être transtypé.
sourabhxiii le

1
its about mongodb
Rohit
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.