2017-06-12 2 views
0

je dois trouver l'indice de ObjectId mangouste dans un tableau comme celui-ci:Problème trouver mangouste ObjectID dans le tableau de chaînes représentant ObjectID

[ { _id: 58676b0a27b3782b92066ab6, score: 0 }, 
    { _id: 58676aca27b3782b92066ab4, score: 3 }, 
    { _id: 58676aef27b3782b92066ab5, score: 0 }] 

Le modèle que je me sers de comparer est un schéma de mangouste avec les éléments suivants données:

{_id: 5868d41d27b3782b92066ac5, 
updatedAt: 2017-01-01T21:38:30.070Z, 
createdAt: 2017-01-01T10:04:13.413Z, 
recurrence: 'once only', 
end: 2017-01-02T00:00:00.000Z, 
title: 'Go to bed without fuss/coming down', 
_user: 58676aca27b3782b92066ab4, 
__v: 0, 
includeInCalc: true, 
result: { money: 0, points: 4 }, 
active: false, 
pocketmoney: 0, 
goals: [], 
pointsawarded: { poorly: 2, ok: 3, well: 4 }, 
blankUser: false } 

Je suis en train de trouver l'index de la model._user dans le tableau ci-dessus en utilisant les éléments suivants:

var isIndex = individualScores.map(function(is) {return is._id; }).indexOf(taskList[i]._user); 

Où individualScores est le tableau d'origine et taskList [i] est le modèle de tâche. Cependant, cela renvoie toujours -1. Il ne trouve jamais le _id correct dans le tableau.

Répondre

1

Je suppose que votre problème est lié à la façon dont _id sont renvoyées par votre requête

Si vous obtenez _id comme String, votre code devrait fonctionner, vérifiez l'extrait ci-dessous

Mais si au lieu, vous obtenez ObjectsId s , vous devez les jeter à cordes premier

var individualScores = [ 
 
    { _id: "58676b0a27b3782b92066ab6", score: 0 }, 
 
    { _id: "58676aca27b3782b92066ab4", score: 3 }, 
 
    { _id: "58676aef27b3782b92066ab5", score: 0 } 
 
] 
 

 
var task = { 
 
     _id: "5868d41d27b3782b92066ac5", 
 
     updatedAt: new Date("2017-01-01T21:38:30.070Z"), 
 
     createdAt: new Date("2017-01-01T10:04:13.413Z"), 
 
     recurrence: 'once only', 
 
     end: new Date("2017-01-02T00:00:00.000Z"), 
 
     title: 'Go to bed without fuss/coming down', 
 
     _user: "58676aca27b3782b92066ab4", 
 
     __v: 0, 
 
     includeInCalc: true, 
 
     result: { money: 0, points: 4 }, 
 
     active: false, 
 
     pocketmoney: 0, 
 
     goals: [], 
 
     pointsawarded: { poorly: 2, ok: 3, well: 4 }, 
 
     blankUser: false 
 
} 
 

 
var isIndex = individualScores.map(
 
    function(is) { 
 
     return is._id; 
 
}) 
 
.indexOf(task._user); 
 

 
console.log(isIndex)

+1

@Santiago Remercier Je vais regarder de plus près, et voir si cela résout. (J'ai essayé précédemment mais une erreur de conversion pour ObjectIds.) –

+1

Eh bien cela a fonctionné. Évidemment la dernière fois je n'ai pas converti en chaîne correctement). :) –

0

Je pense que votre processus devrait bien fonctionner que vous utilisez juste besoin de convertir 'objectID' à String pour comparer. Convertir en utilisant .toString() pour les deux _id et _user.

comme ci-dessous:

var isIndex = individualScores.map(function(is) { 
       return is._id.toString(); 
       }).indexOf(taskList[i]._user.toString());