Mongoose数组indexOf不能正常工作

我有一个mongoose的文件,看起来像这样:

{ "_id":ObjectId("553e4d7a1ebb424364e47e0f"), "url":"/api/images/553e4d6f1ebb424364e47e0b", "type":"knowledge", "title":"asdasd", "week":18, "fields":{ "end":"sdajlsdjlfnsdf", "correctAnswer":"2", "answers":{ "0":"ljnsdlfjnsdfn", "1":"lnsldfnlsf", "2":"ljsndlfnsdlf" }, "question":"sjlnasjld" }, "participants":[ { "user":ObjectId("553e4d531ebb424364e47e07"), "result":{ "answer":"2" } }, { "user":ObjectId("553e4e3bb4ad1bbb646a545c"), "result":{ "answer":"2" } }, { "user":ObjectId("553e4ecc007b12e464c6a7ff"), "result":{ "answer":"1" } }, { "user":ObjectId("553e4ecc007b12e464c6a7ff"), "result":{ "answer":"2" } }, { "user":ObjectId("553e5239b1d44ec7681bcb66"), "result":{ "answer":"2" } }, { "user":ObjectId("553e52be4d85843e69828df3"), "result":{ "answer":"2" } }, { "user":ObjectId("553e52cd8dded86469ee3974"), "result":{ "answer":"2" } }, { "user":ObjectId("553e537b6c4981b169a10c3d"), "result":{ "answer":"2" } }, { "user":ObjectId("553e5553afb1fd6e6a90e6af"), "result":{ "answer":"2" } }, { "user":ObjectId("553e55ddda5144976aa90224"), "result":{ "answer":"2" } }, { "user":ObjectId("553e563af09b82e46ac30c0c"), "result":{ "answer":"2" } }, { "user":ObjectId("553e563af09b82e46ac30c0c"), "result":{ "answer":"2" } }, { "user":ObjectId("553e563af09b82e46ac30c0c"), "result":{ "answer":"2" } }, { "user":ObjectId("553e57b6d554ab136caa95a8"), "result":{ "answer":"2" } }, { "user":ObjectId("553e5a7c094e51826d88dbff"), "result":{ "answer":"2" } } ] } 

而我所要做的就是限制参与者如果已经完成了参与任务。 我使用这段代码来试图限制它们,但是它不能正常工作:

 if (mission.participants && mission.participants.map(function (e) { return e.user; }).indexOf(uid) > -1) { return res.send(403, { err: "You've already completed this mission" }); } 

无论我尝试indexOf函数总是返回-1

如果我运行console.log(mission.participants.map(function (e) { return e.user; })); 我明白了

 [ 553e4d531ebb424364e47e07, 553e4e3bb4ad1bbb646a545c, 553e4ecc007b12e464c6a7ff, 553e4ecc007b12e464c6a7ff, 553e5239b1d44ec7681bcb66, 553e52be4d85843e69828df3, 553e52cd8dded86469ee3974, 553e537b6c4981b169a10c3d, 553e5553afb1fd6e6a90e6af, 553e55ddda5144976aa90224, 553e563af09b82e46ac30c0c, 553e563af09b82e46ac30c0c, 553e563af09b82e46ac30c0c, 553e57b6d554ab136caa95a8, 553e5a7c094e51826d88dbff ] 

我已经validation了uidvariables实际上是在数组中,所以这不是问题。

运行io.js v1.8.1mongoose v4.0.1MongoDB v2.6.9

问题是你正在比较一个对象Schema#ObjectId到一个String 。 您需要将ObjectId转换为map函数中的String,以便indexOf可以find所需的uid

 if (mission.participants && mission.participants.map(function (e) { return e.user.toString(); }).indexOf(uid) > -1) { return res.send(403, { err: "You've already completed this mission" }); }