这是我正在尝试的示例文档
{
"_id" : "3",
"description" : "DESCRIPTION ARTICLE AD",
"article_code" : "AD",
"purchase" : [
{
"company" : 1,
"cost" : "70.010000"
},
{
"company" : 2,
"cost" : "75.820000"
},
{
"company" : 3,
"cost" : "69.910000"
}
],
"stock" : [
{
"country" : "01",
"warehouse" : {
"code" : "01",
"units" : 5
}
},
{
"country" : "01",
"warehouse" : {
"code" : "02",
"units" : 6
}
}
]
}
我的用例是我们有包含多个对象的文档,如股票和购买、userInfo、lang 用户说话等。我正在应用标准来获取 userInfo,其中用户名是 abc,用户角色是 admin 等。如果不匹配,只需忽略该特定条件。
我想得到低于purchase.company = 2 和stocks.warehouse.units = 6 的输出。
示例 OP1 ->
"_id" : "3",
"description" : "DESCRIPTION ARTICLE AD",
"article_code" : "AD",
"purchase" : [
{
"company" : 2,
"cost" : "75.820000"
}
],
"stock" : [
{
"country" : "01",
"warehouse" : {
"code" : "02",
"units" : 6
}
}
]
}
示例 OP2 ->
"_id" : "3",
"description" : "DESCRIPTION ARTICLE AD",
"article_code" : "AD",
"purchase" : [
{
"company" : 2,
"cost" : "75.820000"
}
],
"stock" : [
{
"country" : "01",
"warehouse" : {
"units" : 6
}
}
]
}
答案 0 :(得分:0)
您可以为此使用 Mongodb 的 aggregation framework。
db.testdb.aggregate([
{$match: {"purchase.company": 2 , "stock.warehouse.units" : 6}},
{ $project: {
_id: 1,
description: 1,
article_code: 1,
purchase: { $filter: {
input: "$purchase",
as: "purchase",
cond: { $eq: ["$$purchase.company", 2] } } },
stock: { $filter: {
input: "$stock",
as: "stock",
cond: { $eq: ["$$stock.warehouse.units", 6] } } }
} }
]).pretty()
如果你执行上面的查询,输出将是:
{
"_id" : "3",
"description" : "DESCRIPTION ARTICLE AD",
"article_code" : "AD",
"purchase" : [
{
"company" : 2,
"cost" : "75.820000"
}
],
"stock" : [
{
"country" : "01",
"warehouse" : {
"code" : "02",
"units" : 6
}
}
]
}