如何在MongoDB上创建包含数组的数组



我正在尝试对mongodb进行查询。我想得到一个数组,其中包含每个文档的[位置,状态]。这就是我的收藏看起来像的样子

{
"_id": 1,
"status": "OPEN",
"location": "Costa Rica",
"type": "virtual store"
},
{
"_id": 2,
"status": "CLOSED",
"location": "El Salvador"
"type": "virtual store"
},
{
"_id": 3,
"status": "OPEN",
"location": "Mexico",
"type": "physical store"
},
{
"_id": 4,
"status": "CLOSED",
"location": "Nicaragua",
"type": "physical store"
}

我使用聚合框架进行了一个查询,试图获取与特定类型的存储匹配的所有文档。

{
{'$match': {
'type': { '$eq': "physical store"}
}
}

我想要的是这样的东西:

{
{
'stores': [
["Mexico", "OPEN"],
["Nicaragua", "CLOSED"]
]
},
}

我试着用$push,但没能成功。有人能指导我怎么做吗?

因为{ $push: ["$location", "$status"] }会给您错误The $push accumulator is a unary operator。您必须通过向它传递一个输出所需数组的单个对象来解决它。一种方法是:

[
{
"$match": {
"type": {
"$eq": "physical store"
}
}
},
{
"$group": {
"_id": null,
"stores": {
"$push": {
"$slice": [["$location", "$status"], 2]
}
}
}
}
]

如果给定的文档不是子文档,那么下面是方法:

db.collection.find({
type: {
$eq: "physical store"
}
},
{
location: 1,
status: 1
})

上述的MongoPlayGround链接

如果它们是字段的一部分(意味着它们是子文档(,那么下面是方法:

db.collection.aggregate([
{
$project: {
stores: {
$filter: {
input: "$stores",
as: "store",
cond: {
$eq: [
"$$store.type",
"physical store"
]
}
}
}
}
},
{
$unwind: "$stores"
},
{
$project: {
location: "$stores.location",
status: "$stores.status",
_id: "$stores._id"
}
}
])

上述的MongoPlayGround链接

相关内容

  • 没有找到相关文章

最新更新