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

Want to find value which lies within range of array fields

 {
"_id" : 1,
"password" : "aXFcS7kSOpZBepd/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,其中这个 recipt 值(由我提供)所在。

为此我在后台写了一段代码:

  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 文件没有返回任何内容。我哪里错了。

我认为您误用了查找功能。它比你想象的要强大得多:p

实际上,find 只需要一个参数,它是一个回调函数,将使用三个参数调用:要测试的元素、该元素的索引和数组。如果测试元素有效,您将 return 为真。 此处的文档: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};
})

那应该return你的数组中的第一个匹配值,或者没有找到元素的undefined。