{
"_id" : 1,
"password" : "$2a$10$09XFcS7kSOpZBepd/uS8sO/5a7WU2B68L18TrC/EJ2Jjf3zX3mc8C",
"username" : "neetu",
"name" : "neetu12",
"__v" : 3,
"Address" : "America",
"DOB" : ISODate("2000-03-05T00:00:00.000Z"),
"Email" : "neetu@gmail.com",
"isActive" : false,
"joiningDate" : ISODate("2015-03-01T00:00:00.000Z"),
"salary" : "20000",
"profile" : ObjectId("54f02d1538f604c0116752e2"),
"reciptBook" : [
{
"startingReciptNumber" : 3001,
"endingReciptNumber" : 3100,
"_id" : ObjectId("550aa7a5a6d7f2c80f028154")
},
{
"startingReciptNumber" : 9000,
"endingReciptNumber" : 9099,
"_id" : ObjectId("550bcbb3544cdb60102ac736")
}
]}
我在用户架构中有这样的文档。我想要的是从用户架构中的reciptBook数组中获取endingReciptNumber,其中此recipate Value(由我提供)所在。
为此,我在后端编写了一个代码:
apiRouter.route('/users/:_id/:reciptValue')
.get(function(req, res){
User.find({'_id':req.params._id,'reciptBook.startingReciptNumber':{$gte : +req.params.reciptValue}}, function(err, obj){
if(err) res.json(err);
console.log(obj);
res.json(obj);
});
});
这里我传递登录用户的id和数组reciptBook将在startingreciptNumber和endingReciptNumber值范围内具有该值的recipt值。但api文件没有返回任何内容。我在这里错了。
答案 0 :(得分:0)
我认为你滥用了find功能。它比你想象的要强大得多:p
实际上,find只接受一个参数,这是一个将使用三个参数调用的回调:要测试的元素,该元素的索引和数组。如果测试元素有效,您将返回true。 文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
基本上,你想要做的是:
var myElement = User.find(function(element, index, array){
return element["_id"] == req.params._id && element.reciptBook.startingReciptNumber == {$gte: +req.params.reciptValue};
})
那应该返回数组中的第一个匹配值,或者找不到元素的未定义。