如何创建包含 MongoDB 上的数组的数组
How to create an array containing arrays on MongoDB
我正在尝试查询 mongodb。我想获得一个包含每个文档的 [location, status] 的数组。
这就是我的 collection 的样子
{
"_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 link for the above
如果,它们是一个字段的一部分(意味着它们是子文档),那么下面是方法:
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"
}
}
])
我正在尝试查询 mongodb。我想获得一个包含每个文档的 [location, status] 的数组。 这就是我的 collection 的样子
{
"_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 link for the above
如果,它们是一个字段的一部分(意味着它们是子文档),那么下面是方法:
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"
}
}
])