在mongo上,我为每个user
创建了history
列数组,以获取特定卡的ID,因此我想设置一个是否知道的条件:
要理解我的代码:
- 找到ID用户,找到他的
history
:如果卡ID已经存在=〉不要在该数组上复制ID - 但是,如果不存在:将ID添加到他自己的
history
数组中。
My req.body._id
是用户提交的Id
值
const forThisUser = { _id: req.user._id }
const condition = await User.find(forThisUser, {"history" : { $in : req.body._id}})
async function alreadyPresentOrNot(res, req){
if(condition>0){
console.log("Already present !")
res.sendStatus(401);
}
else{
console.log("Card not finding, add on array now !")
await User.findOneAndUpdate(forThisUser, { $addToSet: { history: req.body._id } }, {upsert: true})
res.sendStatus(201);
}
}
我得到这个错误:
ERROR Expression $in takes exactly 2 arguments. 1 were passed in.
谢谢
2条答案
按热度按时间31moq8wy1#
只是尝试在数组中使用它。
const ids = [req.body._id];
const condition = await User.find(forThisUser, {"history" : { $in : [ids]}})
这里是官方链接,说你必须使用$in : [array]
https://mongoosejs.com/docs/api/aggregate.html?p3rjfoxz2#
请参考Monngoose的文档:
您的查询应该是:
Find将filters参数作为对象,该对象为:
与您的问题无关,但您可能也想看看您的HTTP response codes。
例如,对于重复的条目,您将返回
409 Conflict
,或者返回400 Bad Request
而不是401 Unauthorized
。如果添加了卡,则可以返回
200 Success
或204 No Conntent
,除非您在同一请求中创建卡资源,否则将返回201 Created