2017-06-12 27 views
0

Ich brauche den Index des Mungo objectID in einem Array wie folgt zu finden:Ausgabe findet Mungo ObjectID in Array von Strings repräsentieren ObjectIDs

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

Das Modell, das ich ein Mungo-Schema mit dem folgenden vergleichen bin mit ist Daten:

{_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 } 

ich versuche, oben mit dem folgenden den Index des model._user im Array zu finden:

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

Dabei ist individualScores das ursprüngliche Array und taskList [i] ist das Aufgabenmodell. Dies gibt jedoch immer -1 zurück. Es findet nie die richtige _id im Array.

Antwort

1

Ich denke, Ihr Problem zu, wie _id zusammenhängt zurückgegeben werden durch Ihre Frage

Wenn Sie erhalten _id als String, sollte Ihr Code funktioniert, überprüfen Sie das Snippet unten

Aber statt, wenn, erhalten Sie ObjectsId s , können Sie sie zu String zuerst

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)

zu werfen haben
+1

Thank @Santiago Ich werde einen genaueren Blick, und sehen, ob es löst. (Ich habe vorher versucht, aber einen Konvertierungsfehler für ObjectIds.) –

+1

Nun, das hat funktioniert. Offensichtlich habe ich das letzte Mal nicht richtig in String konvertiert. :) –

0

Ich denke, dass Ihr Prozess gut funktionieren sollte, dass Sie gerade nur 'objectID' zu String konvertieren müssen, um zu vergleichen. Konvertieren mit .toString() für beide _id und _user.

wie unten:

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