Javascript 在表示ObjectID的字符串数组中查找mongoose ObjectID时出现问题

Javascript 在表示ObjectID的字符串数组中查找mongoose ObjectID时出现问题,javascript,arrays,node.js,mongodb,mongoose-schema,Javascript,Arrays,Node.js,Mongodb,Mongoose Schema,我需要在如下数组中找到mongoose objectID的索引: [ { _id: 58676b0a27b3782b92066ab6, score: 0 }, { _id: 58676aca27b3782b92066ab4, score: 3 }, { _id: 58676aef27b3782b92066ab5, score: 0 }] 我用来比较的模型是一个mongoose模式,包含以下数据: {_id: 5868d41d27b3782b92066ac5, updatedAt: 2

我需要在如下数组中找到mongoose objectID的索引:

[ { _id: 58676b0a27b3782b92066ab6, score: 0 },
  { _id: 58676aca27b3782b92066ab4, score: 3 },
  { _id: 58676aef27b3782b92066ab5, score: 0 }]
我用来比较的模型是一个mongoose模式,包含以下数据:

{_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 }
我正在尝试查找模型的索引。\u上面数组中的用户使用以下命令:

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

其中individualScores是原始数组,taskList[i]是任务模型。但是,它总是返回-1。它在数组中永远找不到正确的_id。

我想您的问题与查询如何返回\u id有关

如果您将
\u id
作为
字符串
,您的代码应该可以工作,请检查下面的代码段

但如果您得到
ObjectsId
s,则必须首先将它们转换为字符串

var个人分数=[
{u id:“58676b0a27b3782b92066ab6”,分数:0},
{u id:“58676aca27b3782b92066ab4”,分数:3},
{u id:“58676aef27b3782b92066ab5”,分数:0}
]
var任务={
_id:“5868d41d27b3782b92066ac5”,
更新日期:新日期(“2017-01-01T21:38:30.070Z”),
创建日期:新日期(“2017-01-01T10:04:13.413Z”),
重复:“仅一次”,
结束:新日期(“2017-01-02T00:00:00.000Z”),
标题:“无忧无虑地上床睡觉/下来”,
_用户:“58676aca27b3782b92066ab4”,
__v:0,
includeInCalc:正确,
结果:{money:0,points:4},
活动:错误,
零用钱:0,
目标:[],
pointsawarded:{差:2,好:3,好:4},
blankUser:false
}
var isIndex=individualScores.map(
功能(is){
返回值为.\u id;
})
.indexOf(任务用户);

console.log(isIndex)
我认为您正在使用的流程应该运行良好,只需将“objectID”转换为
字符串进行比较即可。使用
.toString()
\u id
\u user
进行转换

像下面这样:

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

谢谢@Santiago,我会仔细看看,看看这是否能解决问题。(我以前试过,但是ObjectId的转换错误。)很好。显然,上次我没有正确地转换为字符串。):)