想要找到位于数组字段范围内的值

时间:2015-03-20 10:18:51

标签: arrays node.js mongoose

 {
"_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文件没有返回任何内容。我在这里错了。

1 个答案:

答案 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};
})

那应该返回数组中的第一个匹配值,或者找不到元素的未定义。