发布
社区首页 >问答首页 >如何在猫鼬中执行查找,然后执行,然后执行OR

如何在猫鼬中执行查找,然后执行,然后执行OR
EN

Stack Overflow用户
提问于 2021-06-01 08:48:54
回答 1查看 173关注 0票数 1

我有一个疑问,我希望执行类似的操作:

  1. Archive不存在,模式中的
  2. 所有者电子邮件在查询中,或者在
  3. 的模式中的
  4. 所有者电子邮件在查询

下面是我的理解尝试过的

代码语言:javascript
代码运行次数:0
复制
    let docs = await Document.find({ archive: { $exists: false }})
      .and([{ owner_email: { $regex: localQuery } }])
      .or()
      .populate('owner_id', null, {
        email: { $regex: localQuery },
      });

所以我想做的是,我有两个模式,用户和文档,用户有时作为图书管理员共享,然后我希望返回,两者都匹配填充的电子邮件或实际所有者的电子邮件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-01 09:59:40

由于猫鼬的populate()方法并不真正“连接”集合,而是在find()操作之后对数据库进行另一个查询以填充,因此您可以切换到聚合管道并使用$lookup来匹配引用字段中的电子邮件。因此,假设你的模型看起来像:

代码语言:javascript
代码运行次数:0
复制
const Document = mongoose.model('Document', {
    name: String,
    archive: String, 
    owner_email: String,
    owner: {type: Schema.Types.ObjectId, ref: 'Person'}
});

const Person = mongoose.model('Person', {
    firstName: String,
    lastName: String,
    email: String
});

然后,你可以:

代码语言:javascript
代码运行次数:0
复制
const result = await Document.aggregate([
        {
            $lookup: {
                from: Person.collection.name,
                localField: "owner",
                foreignField: "_id",
                as: "referencedOwner"
            }
        },
        {
            $match: {
                archive: {$exists: false},
                $or: [
                    {"referencedOwner.email": {$regex: localQuery}},
                    {"owner_email": {$regex: localQuery}}]
            }
        }
    ]);

下面是蒙古操场上的一个工作示例:https://mongoplayground.net/p/NqAvKIgujbm

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67785649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档