当用户单击按钮时,他们的userId和产品ID将发送到下面的我的查询中。我想检查该产品是否存在,如果存在,然后检查同一文档中的对象数组中是否存在特定的userId。我已经尝试了以下方法,但是当我使用数组中不存在userId的其他产品对其进行测试时,它告诉我该用户存在。因此,似乎正在检查所有产品,而不只是检查我正在传递产品ID的产品。
Product.findById(productId).then(product => {
if (!product) {
console.log("no product found");
}
return Product.find({ "requests.userId": userId })
.then(result => {
if (result === undefined || result.length == 0) {
res.status(200).json({ message: "You can add it!" });
} else {
res.status(200).json({ message: "You cannot add this again!" });
}
})
.catch(err => {
console.log(err);
});
});
});
答案 0 :(得分:1)
您需要做的是找到同时满足两个条件的产品:
requests
数组中有特定的字符串您的查询正在做的是分别测试这两个条件。首先,找到产品,然后测试是否有满足条件2的任何产品。
要将两个条件应用于同一产品,请使用一个查询:
Product.find({ _id: productId, 'requests.userId': userId })
.then(product => {
if (product) {
const [result] = product; // take the first matched item
// ... do stuff with result
}
})
或者,您可以在内存中完成所有这些操作:
Product.findById(productId).then(product => {
if (!product) {
console.log("no product found");
// ... potentially send an error here
return;
}
// find a match in memory
const [result] = product.requests.filter(uid => uid === userId);
if (result) {
// ...
}
});
答案 1 :(得分:1)
首先,Ln 4,您尝试从Mongo模式检查完整的Product对象中的用户ID。
如果您的userId存储在每个产品中, 然后将Ln 4,产品更改为产品。