首页 > 解决方案 > 如何在文档属性(数组)中查找 ID 并返回该对象的填充信息

问题描述

我在 MongoDB 中有以下文档。如何在 likes 数组中找到特定 ID 并返回该对象的填充信息?

这是文件:

{ _id: ObjectId("60a90f0e1f4af802e8b893e6"),
  status: 'Available',
  likes: 
   [ ObjectId("60a8e0b9baa1572b847931ed"),
     ObjectId("60aa342cb6b39e3024453465") ],
  name: 'coba',
  age: '1 Year',
  __v: 0 }

这是我尝试过的函数,但它返回 404 错误,尽管您可以看到 id 实际上存在于 likes 数组中。

    const [foundUser] = await PetsModel.find(
      {
        likes: { $in: ["60a8e0b9baa1572b847931ed"] }
      },
      { likes: 1 }
    ).populate({
      path: 'likes',
      select: {
        __v: 0,
        createdAt: 0,
        updatedAt: 0,
        password: 0
      }
    });

    res.status(201).json({
      success: true,
      data: foundUser.likes
    });
  

标签: javascriptarraysmongodbmongoose

解决方案


在那里你告诉 MongoDB 搜索一个字符串,而不是一个 id。因此,您必须将字符串转换为 id,以便 MongoDB 可以搜索它。代码应如下所示:

const mongoose = require('mongoose');

const [foundUser] = await PetsModel.find(
      {
        likes: { $in: [ mongoose.Types.ObjectId("60a8e0b9baa1572b847931ed") ] }
      },
      { likes: 1 }
    ).populate({
      path: 'likes',
      select: {
        __v: 0,
        createdAt: 0,
        updatedAt: 0,
        password: 0
      }
    });

    res.status(201).json({
      success: true,
      data: foundUser.likes
    });

推荐阅读