如何修复MongoDB Stitch函数中的“结果未定义”

时间:2019-07-10 08:37:28

标签: javascript mongodb asynchronous mongodb-stitch

我正在MongoDB中创建缝合功能,并且结果未定义,而不是两倍。

我正在使用MongoDB数据库开发iOS应用。我正在创建针迹函数,并使用callFunction(withName:withArgs:_ :)方法。我编写了一个函数来计算平均早晨值。我想将早上值返回给应用。这是下面的代码。

@PreAuthorize("@securityService.isAllowToDeleteSomeObject(#.id)")
public void delete(@PathVariable("id") final Long id) {   
}

“”“输出”“”

早晨 869.5729166666666

  

结果:   {     “ $ undefined”:是   }   结果(JavaScript):   EJSON.parse('{“ $ undefined”:true}')

“”“-输出结束”“”

我正在尝试返回两倍的早晨值,但是它返回BSONUndefined。当我尝试从iOS应用获得结果时, “”“上午:BSONUndefined()”“” 但是在return语句之前,它将打印早晨值以正确地缝制控制台。

2 个答案:

答案 0 :(得分:0)

您未编写集合,{正在发送$ undefined:true}

解决方案1 ​​ 返回collection.find结果

return collection.find({month: { $eq: MONTH },
    day: { $eq: DAY },
    hour: { $gte: 8 },
    hour: { $lt: 13 }
    }).toArray().then((data) => {
        data.forEach((el) =>{
            total = total +  el.value;
            count = count + 1.0; 
        });
        morning = total/count;
        console.log("morning");
        console.log(morning);
        return {morning};
    })
    .catch((error) => {
        console.log(error);
        return {morning};
    });

解决方案2:

返回文档本身

var docs = collection.find({month: { $eq: MONTH },
    day: { $eq: DAY },
    hour: { $gte: 8 },
    hour: { $lt: 13 }
    }).toArray().then((data) => {
        data.forEach((el) =>{
            total = total +  el.value;
            count = count + 1.0; 
        });
        morning = total/count;
        console.log("morning");
        console.log(morning);
        return {morning};
    })
    .catch((error) => {
        console.log(error);
        return {morning};
    });

return docs

答案 1 :(得分:0)

以这种方式在MongoDB return查询之前使用find()语句

exports = function(DAY,MONTH){
    var total = 0.0;
    var count = 0.0;
    var morning = 0.0;

    var collection = context.services.get("mongodb-atlas").db("database_name").collection("collection_name");
    return collection.find({month: { $eq: MONTH },
    day: { $eq: DAY },
    hour: { $gte: 8 },
    hour: { $lt: 13 }
    }).toArray().then((data) => {
        data.forEach((el) =>{
            total = total +  el.value;
            count = count + 1.0; 
        });
        morning = total/count;
        console.log("morning");
        console.log(morning);
        return {morning};
    })
    .catch((error) => {
        console.log(error);
        return {morning};
    });
};