javascript - Mongoose 从查询中检索特定的数组索引(不是完整数组)
问题描述
考虑以下集合:
> db.customers.find().pretty();
{
"_id" : ObjectId("5b675d8180db9c13ac5b5c16"),
"name" : "John",
"active": true,
"purchasedItems" : [
{
"item_id" : "5b639e2dbc55ef13a6e50d29",
"quantity" : 2,
"deliveryDate" : 1536095404603
},
{
"item_id" : "5b0f0dcc4d122607cff6ce87",
"quantity" : 33,
"deliveryDate" : 1536179151868
},
{
"item_id" : "5b3a74bd973d5014df9d7d4b",
"quantity" : 23,
"deliveryDate" : 1536265571029
},
{
"item_id" : "5b101be68244dd03fb64acdd",
"quantity" : 111,
"deliveryDate" : 1536351973191
},
{
"item_id" : "5b101be68244dd03fb64acdd",
"quantity" : 11,
"deliveryDate" : 1536092750426
}
]
},
{
"_id" : ObjectId("5b675d8180db9c13ac5b5c16"),
"name" : "John",
"active": true,
"purchasedItems" : [
{
"item_id" : "354639e2dbc55ef13a6e50d29",
"quantity" : 1,
"deliveryDate" : 1536095404603
},
{
"item_id" : "53340dcc4d122607cff6ce87",
"quantity" : 12,
"deliveryDate" : 1536179151868
},
{
"item_id" : "5b7654bd973d5014df9d7d4b",
"quantity" : 44,
"deliveryDate" : 1536265571029
},
{
"item_id" : "5b1014648244dd03fb64acdd",
"quantity" : 14,
"deliveryDate" : 1536351973191
},
{
"item_id" : "5b101be34344dd03fb64acdd",
"quantity" : 6,
"deliveryDate" : 1536092750426
}
]
}
如何purchasedItems
在不返回完整purchasedItems
数组的情况下检索查询中的第 n 个元素?
我试过没有成功(考虑index
到我想要检索的数组索引):
CustomerModel.findOne(
{
_id: customer_id,
active: true
},
{
$arrayElementAt: { purchasedItems: index }
}
)
错误:
Error: error: {
"ok" : 0,
"errmsg" : "Unsupported projection option: $arrayElementAt: { purchasedItems: 1.0 }",
"code" : 2,
"codeName" : "BadValue"
}
解决方案
$arrayElemAt应该与$aggregation管道一起使用。要检索第 n 个购买的商品,请查看下面的聚合代码。
db.test.aggregate([{
"$match": {
_id: customer_id,
active: true
}
},
{
"$project": {
_id: 1,
name: 1,
purchasedItems: { $arrayElemAt: ["$purchasedItems", INDEX]}
}
}
])
这将返回具有以下结构的文档
{
"_id" : ObjectId("5b6b2672d99b3f60dfd39e6b"),
"name" : "John",
"purchasedItems" : { "item_id" : "5b3a74bd973d5014df9d7d4b", "quantity" : 23, "deliveryDate" : 1536265571029 }
}
推荐阅读
- sql - Reducing lines and readability in SQL query
- php - 在 AdminServiceProvider.php 第 92 行中找不到模板类 []
- java - 没有 Playstore 和 Internet 连接的许可处理年份检查
- javascript - 有没有办法在千位数字中添加逗号?
- go - 使用带有反射的 Gorm 插入数据
- c# - .NET Core 3 序列化为 JSON 时忽略属性
- docker - 无法更改 kubernetes pod 的时区
- python - 我的代码中缺少什么来达到这个输出?
- node.js - 在 Node JS 中延迟发布响应
- sql - Is it possible to pass a built in function as an argument to a trigger?