我是靠谱客的博主 曾经小鸽子,最近开发中收集的这篇文章主要介绍微信云函数 -501007 invalid parameters 聚合中match()无法按照Date时间查询,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

想筛选endTime在当前时间new Date()以前或以后的数据,实现“已完成”和“未完成的功能

var dateButIsFuckingUselessYouSonOfABitchFuckingIdiot= new Date()

当涉及一个表时,用where很轻松就实现了

const result = await db.collection('activity').where({
_openid: OPENID,
endTime: event.completed==0 ? _.gt(dateButIsFuckingUselessYouSonOfABitchFuckingIdiot):_.lte(dateButIsFuckingUselessYouSonOfABitchFuckingIdiot)
}).get({
success:function(res){
console.log(res)
return res
}
})
return result.data
}

但是涉及联表查询需要用到聚合的lookup()时,问题就出现了:
首先无法在where()后使用aggregate(),虽然where返回的也是一个collection类型,如果可以的话问题会简单很多。
然后改用在aggregate()创建的pipline里使用match()进行筛选,虽然微信官方文档给的是

查询条件与普通查询一致,可以用普通查询操作符

然而在日期的查询上并没有“与普通查询一致”,直接

...
.match({
_openid: OPENID,
endTime: event.completed==0 ? _.gt(dateButIsFuckingUselessYouSonOfABitchFuckingIdiot) : _.lte(dateButIsFuckingUselessYouSonOfABitchFuckingIdiot)
})
...

在执行时会报错:

-501007 invalid parameters …

可恶的是竟然不会报是哪个参数不合规了,摸索发现前辈们大多都是在查询日期时报的错,match()里的日期格式需要是经过db.command.aggregate下的日期转化函数处理后才能用。。。也就是先把new Date() 日期toString() 然后 dateFromString()才能用来查询。。。

const $ = db.command.aggregate
var dateButIsFuckingUselessYouSonOfABitchFuckingIdiot= new Date()
var fuckTheBloodyHellAggregateFuckingDate = $.dateFromString({
dateString: dateButIsFuckingUselessYouSonOfABitchFuckingIdiot.toJSON()
})

把转化后的日期变量放到查询条件里就OK了
下面是我的能运行的代码,where()和聚合的match()都有用到

// 云函数入口函数
exports.main = async (event, context) => {
const _ = db.command
const $ = db.command.aggregate
const wxContext = cloud.getWXContext()
let { OPENID, APPID, UNIONID } = cloud.getWXContext()
var dateButIsFuckingUselessYouSonOfABitchFuckingIdiot= new Date()
var fuckTheBloodyHellAggregateFuckingDate = $.dateFromString({
dateString: dateButIsFuckingUselessYouSonOfABitchFuckingIdiot.toJSON()
})
console.log(fuckTheBloodyHellAggregateFuckingDate)
if (event.initiator==1){
console.log("发起人:"+OPENID)
const result = await db.collection('activity').where({
_openid: OPENID,
endTime: event.completed==0 ? _.gt(dateButIsFuckingUselessYouSonOfABitchFuckingIdiot):_.lte(dateButIsFuckingUselessYouSonOfABitchFuckingIdiot)
}).get({
success:function(res){
console.log(res)
return res
}
})
return result.data
}
else {
console.log("非发起人")
const result = await db.collection('act-user').aggregate().lookup({
from: "activity",
localField: "activityId",
foreignField: "_id",
as: "activityList"
})
.replaceRoot({
newRoot: $.mergeObjects([ $.arrayElemAt(['$activityList', 0]), '$$ROOT' ])
})
.addFields({
matched: $.gte(['$endTime', fuckTheBloodyHellAggregateFuckingDate])
})
.match({
userId: OPENID,
matched: event.completed==0
})
.project({
activityList: 0
}).end({
success:function(res){
console.log(res)
return res
}
})
return result.list
}
}

数据库设计的有点烂,就不放了。

最后

以上就是曾经小鸽子为你收集整理的微信云函数 -501007 invalid parameters 聚合中match()无法按照Date时间查询的全部内容,希望文章能够帮你解决微信云函数 -501007 invalid parameters 聚合中match()无法按照Date时间查询所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部