我想知道如何才能对数据库进行查询,得到满足‘store’{name}字段的所有结果,但这个‘store’是用‘_id’保存的,我使用.opolate()为我带来信息

/**示例:aWait Product.find({store:{name:"特定store"}})*/

const products = await Product.find({ 'store.name' : "Ejemplo1" })
                .populate('store', 'name')

有关计划如下:

const storeSchema = mongoose.Schema({
   _id:"it is added automatically by mongoose",
   name: String
})
export default model('Store', storeSchema);

const productSchema = mongoose.Schema({
   store: {
     type: Schema.Types.ObjectId,
     ref: "Store"
   }
})

基本上我想要实现的是从数据库中提取所有产品与特定的‘store ’,但我仍然不能做到这一点,我感谢任何帮助解决这个问题,无论是一个参考或一个合适的查询的例子,提前感谢

我试过这个: Const p=等待产品.查找({}) .填充({ 路径:‘store’, 匹配:{名称:{$eq:‘Store1’}}, Select :‘name-_id’, })

但它返回整个集合,并且不进行过滤,我收到如下内容: { _id:1, ... 存储:空, ... } { _id:2, ... store :{名称:"store 1"}, ... } { _id:3, ... store :{名称:"store 2"}, ... }

推荐答案

正如@M.CaglarTUFAN所提到的,您不能根据带有PUPLATE的子文档筛选父文档.重构模式是一个很好的 Select .

但是,如果您无法做到这一点,您可以使用MongoDB Aggregate框架使用$lookup$match来实现您想要的结果,如下所示:

const products = await Product.aggregate([
   { 
      $lookup: { //< Lookup is like a Left Join in SQL
         from: "stores", 
         localField: "store", 
         foreignField: "_id", 
         as: "store_details" //< You are adding this field to the output
      } 
   }, 
   { 
      $match: { //< Now from all the results only give me back the store Ejemplo1
         'store_details.name': 'Ejemplo1' 
      } 
   }
]).exec();

如果您的产品集合很大(数百万个文档),那么请记住,这将对所有文档执行$lookup,因此效率可能会很低.但是,在不重构模式的情况下,这是对数据库的最好的单一调用.

您的第二个选项涉及2个数据库查询.

  1. 从store 集合中获得你想要的store 的_id%.
  2. 然后使用该结果查询Products集合并填充匹配的记录.

Node.js相关问答推荐

如何在Node js中从MongoDB获取特定数据,使用GET方法?

无法从ejs Web应用程序中的正文中提取数据

容器端口是容器内 node 应用程序的端口吗?

Node.js中Redis的并发问题

未显示NPM版本

EJS ForEach循环标记

一个大型的单个 Redis 实例可以处理所有事情,还是多个 Redis 实例?

为什么我的过滤器无法在我在下面编写的 Google Analytics 4 应用程序脚本代码中工作?我该如何修复它?

Next.js 路由不起作用 - 页面未正确加载

如果我在父文件夹中运行,子进程生成不起作用

TypeScript Eslint警告了一个AWS客户端构造函数(dynamodb),但没有警告另一个(s3)

具有项目外部子路径导入的 Firebase 函数

在 MacOS Ventura 上使用 NVM 安装 node ?

是Electron 的密码和登录凭据的安全存储吗?

使用 Node.js 在 MongoDB 中搜索

使用加密模块的流功能获取文件的哈希(即:没有 hash.update 和 hash.digest)

对不同对象中的函数使用相同的键时,V8 中的函数调用缓慢

如何brew安装特定版本的Node?

mongo 可以 upsert 数组数据吗?

Heroku + Node:找不到模块错误