我有很多这样的文件
user:62e13ae4f9a38f7610e70bd7,
_id :62e13ae4f9a38f7610e70bdb
transactions:{
{
"amount": 50,
"category": "Bills",
"type": "Expense",
"date": "2022-01-20T00:00:00.000Z",
"_id": "62e13ae4f9a38f7610e70be0"
},
{
"amount": 100,
"category": "Lottery",
"type": "Income",
"date": "2022-01-20T00:00:00.000Z",
"_id": "62e13ae4f9a38f7610e70be1"
},
{
"amount": 200,
"category": "Salary",
"type": "Income",
"date": "2022-01-20T00:00:00.000Z",
"_id": "62e13ae4f9a38f7610e70be2"
}
}我想用一个特定的id从事务数组中检索一个对象(我只想要那个对象)
我尝试了一些方法,比如
const transactions = await Transactions.find({
user: req.user._id,
"transactions._id": {$eq: req.params._id },
}); const transactions = await Transactions.find({
user: req.user._id,
"transactions": { _id: req.params._id },
}); const transactions = await Transactions.find({
user: req.user._id,
"transactions": { $elemMatch:{_id: req.params._id }},
});但是似乎没有什么是可行的,有人能帮我解决这个问题吗?请提一下我犯的错误。
发布于 2022-07-27 14:11:46
尝试直接匹配transactions._id:
"transactions._id": req.params._id示例
const transactions = await Transactions.find({
user: req.user._id,
"transactions._id": req.params._id
});更新
从注释中可以使用投影作为.find()的第二个参数,只返回它在transactions中找到的对象。
const transactions = await Transactions.find({
user: req.user._id,
"transactions._id": req.params._id
}, { "transactions.$": 1 });发布于 2022-07-27 14:11:20
如果你只想要那个匹配的元素,你必须使用搅拌。
db.collection.aggregate([
{
$unwind: "$transactions"
},
{
$match: {
"transactions.id": "idGoesHere"
}
}
])正如您在另一个答案中注释的那样,您也可以使用positional操作符来投影匹配的元素。
https://stackoverflow.com/questions/73139415
复制相似问题