【问题标题】:Mongoose query a populated fieldMongoose 查询填充字段
【发布时间】:2013-07-06 07:31:42
【问题描述】:
   db.History.find({'_file.project': 'someproject' )
      .populate('_file', 'name reference project')
      .sort(sortField || '-created')
      .limit(max || 64)
      .exec(this);

在这里,我试图从 _file 参考中查找与填充字段匹配的所有文档。似乎不起作用。这样的事情有可能吗?

我可以将项目字段复制到此对象,作为一种解决方法,仅用于查询,但我当然不想这样做。

【问题讨论】:

    标签: mongoose populate


    【解决方案1】:

    不可以,find 查询的条件参数只能引用被查询的集合。

    populate 不是一个连接,它只是一个方便的功能,可以通过附加查询来跟进主查询,以从其他集合中提取相关数据。

    【讨论】:

    • 谢谢。所以,为了确定,为了查询基于项目的历史集合,我必须添加项目字段,从文件模型中复制它?检索所有文档然后进行过滤不是一种选择,因为 History 集合可能非常大。
    • @0x80 对,或者获取所有与project 匹配的File 文档,然后使用来自第一个查询的_id 值对History 使用$in 查询。跨度>
    • 我现在明白了。很高兴知道有两种选择。谢谢!
    • 回答时可能不存在,但填充方法支持“匹配”属性:populate({ path: 'notes', match: /airline/, select: 'text', model: 'modelName' options: opts }).mongoosejs.com/docs/api.html#document_Document-execPopulate
    • @DougMolineux match 选项仅控制在主查询完成后填充其路径的文档。如果引用的文档不匹配,则原始引用 id 值保持未填充。
    猜你喜欢
    • 2021-11-03
    • 2012-07-15
    • 2012-01-22
    • 2017-05-21
    • 2021-03-03
    • 1970-01-01
    • 2013-11-03
    • 2015-01-10
    • 2021-09-06
    相关资源
    最近更新 更多