嗨,我有一个组合索引模式,可以在我的MongoDB中保持邮件和组织的独特组合,就像这样
let Schema = mongoose.Schema({
_id:{
organisation:{
type:mongoose.ObjectId,
required:true
ref:'organisations'
},
mail:{
type:String,
required:true
}
},
firstName:{
type:String,
},
lastName:{
type:String
},
})
//some methods and statics here
const Contact = mongoose.model('contacts',Schema);
我想查询所有文件,匹配一个特定的组织ID,而不给一个邮件(从组织的目的上市)我读过一些关于这一点
await Contact
.find(
{
_id:{
organisation:organisation,
mail:{"$exists":true}
}
}
)
但是我得到一个空的结果,所以我尝试了一些正则表达式
await Contact
.find(
{
_id:{
organisation:organisation,
mail:{"$regex":"[^]*"}
}
}
)
但我一直得到相同的空结果,唯一一次我得到的结果是当精确的文件的确切邮件,但它的无用清单的所有邮件的一个组织
有人知道我做错了什么吗?对不起,我是NodeJS > Mongoose > MongoDB Stack的新手
1条答案
按热度按时间g0czyy6m1#
这里遇到的问题与查询中指定完整嵌套文档时的语义有关。根据文件:
整个嵌入文档的相等匹配需要指定
<value>
文档的 exact 匹配,包括字段顺序。因此,问题中的第一个查询是查找
_id
值正好是{ organisation:organisation, mail:{"$exists":true} }
(此时organisation
变量的任何值)的文档。由于_id
的子字段中的$
的限制,我不得不使用不同的字段名,但您可以在this playground demo中看到问题和语义的一般示例。你需要的是使用点表示法。具体来说,比如:
参见playground demonstration here。