Mon code d'origine
const users = [{_id: "019e1c71"}, {_id: "19e1c72a"}, {_id: "1b215900"}];
J'obtiens simplement les résultats par
User.find({ _id: {$in: users} });
Si je change une variable users code > à
const users = ["019e1c71","19e1c72a", "1b215900"];
Comment obtenir les résultats contenant _id donné dans le tableau de l'objet?
3 Réponses :
Vous pouvez utiliser findOne ()
pour rechercher l'ID demandé, par exemple:
User.findOne ({_ id: '019e1c71'})
En supposant que vous sachiez que c'est toujours _id
:
const users = [{_id: "019e1c71"}, {_id2: "19e1c72a"}, {_id3: "1b215900"}]; let query = { $or: users } console.log(query);
ou en supposant que les clés peuvent être différentes:
const users = [{_id: "019e1c71"}, {_id: "19e1c72a"}, {_id: "1b215900"}]; let query = { _id: { $in: users.map(x => x._id) } }; console.log(query);
J'ai une question Si les clés sont fixées à _id
quelle méthode est la meilleure?
Je préférerais $ in
alors la requête est plus simple
L'opérateur $ ou
prend un tableau de documents, qui est exactement ce que vous avez.
const users = [{_id: "019e1c71"}, {_id: "19e1c72a"}, {_id: "1b215900"}]; User.find({$or: users});
Merci! J'ai mal compris l'opération $ ou
pendant longtemps. C'est un moyen très simple d'obtenir les résultats.
Vous pouvez exécuter la .find array method a>. Exemple:
users.find (id => id === "019e1c71");
ou s'il s'agit d'un tableau d'objets object:users.find (userObj => userObj._id === "019e1c71");
@JacobPenney c'est vrai, mais j'ai demandé MongoDB et je cherche une méthode qui intègre MongoDB ou un moyen efficace de résoudre ce problème. Une méthode que je peux utiliser est
array.map
et change le tableau d'objets en tableau de chaînes pur.