Mongo/Mongoose - 产生两种不同结果的类似查询

时间:2021-03-11 23:30:20

标签: mongodb express mongoose

我有点不知所措。我有一个查询,它根据文档中数组中 id 的存在来计算文档数。

例如……我的文档对象是 band。 Band 有一个键值对,它是一个名为 bandMembers 的数组。

band: 
  {
  bandMembers:[id, id, id],
  ... other things
  }

在我的第一条路线中,我正在计算具有来自 req.params._id 的用户 ID 的文档数量,这很好用。

// Get Single
router.get("/:_id", async (req, res) => {
  try {
    const findUser = await User.find({ _id: req.params._id });
    const singleUser = findUser[0];

    //Get number of bands
    let bandCount = await Band.countDocuments({
      bandMembers: { $all: [req.params._id] },
    });

    const user = {
      email: singleUser.email,
      username: singleUser.username,
      picture: singleUser.picture,
      public: singleUser.public,
      favoriteGenres: singleUser.favoriteGenres,
      userTypes: singleUser.userTypes,
      instruments: singleUser.instruments,
      bandCount,
      _id: singleUser._id,
    };
    res.json({ success: "Item fetched", user });
  } catch (err) {
    res.json({ error: "Item not found." });
    console.log(err);
  }
});

现在我需要查询几乎相同的响应,但我需要通过用户名而不是 ID 来查找用户。这意味着 req.params._id 不再存在。我通过用户名找到用户,然后使用该用户的 _id 来计算具有该 ID 作为乐队成员的乐队的数量。代码几乎相同 - 但它不返回计数。相反,它返回 0。

//Get Single By username
router.get("/username/:username", async (req, res) => {
  const { username } = req.params;
  try {
    const findUser = await User.find({ username: username });
    const singleUser = findUser[0];
    
    let singleUserId = singleUser._id;
    let bandCount = await Band.countDocuments({
      bandMembers: { $all: [singleUserId] },
    });

    const user = {
      email: singleUser.email,
      username: singleUser.username,
      picture: singleUser.picture,
      public: singleUser.public,
      favoriteGenres: singleUser.favoriteGenres,
      userTypes: singleUser.userTypes,
      instruments: singleUser.instruments,
      bandCount,
      _id: singleUser._id,
    };
    res.json({ success: "Item fetched", user });
  } catch (err) {
    res.json({ error: "Item not found." });
    console.log(err);
  }
});

知道为什么我可以用第一条路线计算乐队文件,而不能计算第二条路线吗?

0 个答案:

没有答案
相关问题