Node.js Mongoose-如果元素不在数组中,则查询单据

Node.js Mongoose-如果元素不在数组中,则查询单据,node.js,mongodb,express,mongoose,mongoose-schema,Node.js,Mongodb,Express,Mongoose,Mongoose Schema,我在查询通知模式时处理一个问题 receiver:[{type:mongoose.Schema.Types.ObjectId,ref:'Profile'}], 读者:[{ readerId:{type:mongoose.Schema.Types.ObjectId, ref:'Profile',默认值:[]}, 阅读地址:{type:Date} }] 为了查询最新通知,我编写了以下查询: 目标是检查readBy数组中是否存在“配置文件.id”(这意味着该用户未读取该配置文件) const not

我在查询通知模式时处理一个问题

receiver:[{type:mongoose.Schema.Types.ObjectId,ref:'Profile'}],
读者:[{
readerId:{type:mongoose.Schema.Types.ObjectId,
ref:'Profile',默认值:[]},
阅读地址:{type:Date}
}]
为了查询最新通知,我编写了以下查询:

目标是检查readBy数组中是否存在“配置文件.id(这意味着该用户未读取该配置文件)

const notifications=wait Notification.find({
receiver:profile.id,//这可以工作
readBy:{//,但是,添加它将返回一个空数组
$elemMatch:{
readerId:{$ne:profile.id}
}
}
})

非常感谢您的帮助,我在这里呆了好几天。

我想这比我们现在所做的要容易

如果您想知道元素是否在数组中,那么,查询并查找它。如果查询为空,则表示不存在,否则为是

看这个

是一个简单的查询,只检查用户
profile.id
是否接收并读取了一个文档

db.collection.find([
{
“接收者”:profile.id,
“readBy.readerId”:profile.id
}
])
请检查输出是否符合预期,或者我误解了您的请求

mongoose
中,您可以使用:

var find=wait model.find({“receiver”:1,“readBy.readerId”:1}).countDocuments()
它将返回与查询匹配的文档数

编辑以获取阵列中不存在读取器ID的文档:

在这里,您只需要添加
$ne
运算符

db.collection.find([
{
“接收者”:profile.id,
“readBy.readerId”:{
“$ne”:profile.id
}
}
])

你可以检查这个

我认为这比我们试图做的要容易

如果您想知道元素是否在数组中,那么,查询并查找它。如果查询为空,则表示不存在,否则为是

看这个

是一个简单的查询,只检查用户
profile.id
是否接收并读取了一个文档

db.collection.find([
{
“接收者”:profile.id,
“readBy.readerId”:profile.id
}
])
请检查输出是否符合预期,或者我误解了您的请求

mongoose
中,您可以使用:

var find=wait model.find({“receiver”:1,“readBy.readerId”:1}).countDocuments()
它将返回与查询匹配的文档数

编辑以获取阵列中不存在读取器ID的文档:

在这里,您只需要添加
$ne
运算符

db.collection.find([
{
“接收者”:profile.id,
“readBy.readerId”:{
“$ne”:profile.id
}
}
])

您可以检查此项

谢谢您的回答,但这里有一点您遗漏了,我希望readerId不出现在readBy数组中。你能更新一下答案吗?非常感谢,它起了作用,而mongo游乐场是我不知道的。谢谢你的回答,但是有一件重要的事情你错过了,我不希望readerId出现在readBy数组中。你能更新一下答案吗?非常感谢,它起了作用,而mongo游乐场是我不知道的。这真是太棒了,真的很有帮助。