我有点不知所措。我有一个查询,它根据文档中数组中 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);
}
});
知道为什么我可以用第一条路线计算乐队文件,而不能计算第二条路线吗?