Mongodb 如何使用对象数组的$in运算符返回匹配文档
我可以知道如何在对象数组中使用Mongodb 如何使用对象数组的$in运算符返回匹配文档,mongodb,mongoose,mongodb-query,Mongodb,Mongoose,Mongodb Query,我可以知道如何在对象数组中使用$in运算符吗?并且只返回匹配文档作为结果 这是我迄今为止所尝试的,但我仍然无法得到我想要的 假设我有一组这样的文档 { "_id" : ObjectId("56824417fa32883c0335ce61"), "company_name" : "Pentagon", "deal_details" : [ { "deals_name" : "hello", "deals_tag
$in
运算符吗?并且只返回匹配文档作为结果
这是我迄今为止所尝试的,但我仍然无法得到我想要的
假设我有一组这样的文档
{
"_id" : ObjectId("56824417fa32883c0335ce61"),
"company_name" : "Pentagon",
"deal_details" : [
{
"deals_name" : "hello",
"deals_tag" : ["A","B","C"],
"_id" : ObjectId("56c69da8a1f60804064abf0f")
},
{
"deals_name" : "Hola",
"deals_tag" : ["E","F","G"],
"_id" : ObjectId("56c69da8a1f60804064abf0f")
},
],
"_id" : ObjectId("54824417fa32983c0335ce61"),
"company_name" : "Oreo",
"deal_details" : [
{
"deals_name" : "Bye",
"deals_tag" : ["B"],
"_id" : ObjectId("56c69da8a1f60804064abf0f")
},
{
"deals_name" : "Ciao",
"deals_tag" : ["H","I","J"],
"_id" : ObjectId("56c69da8a1f60804064abf0f")
},
]
}
我就是这么做的
User.find({
'deal_details.deals_tags': {
$in: ["B"]
}
}
}, {'deal_details':1}).exec(function(err, deal) {
if (err) {
return res.status(500).send(err);
}
res.status(200).send(deal);
});
我对交易的期望是
{
"deals_name" : "hello",
"deals_tag" : ["A","B","C"],
"_id" : ObjectId("56c69da8a1f60804064abf0f")
},
{
"deals_name" : "Bye",
"deals_tag" : ["B"],
"_id" : ObjectId("56c69da8a1f60804064abf0f")
}
但是我得到了这个
{
"deals_name" : "hello",
"deals_tag" : ["A","B","C"],
"_id" : ObjectId("56c69da8a1f60804064abf0f")
},
{
"deals_name" : "Hola",
"deals_tag" : ["E","F","G"],
"_id" : ObjectId("56c69da8a1f60804064abf0f")
},
{
"deals_name" : "Bye",
"deals_tag" : ["B"],
"_id" : ObjectId("56c69da8a1f60804064abf0f")
},
{
"deals_name" : "Ciao",
"deals_tag" : ["H","I","J"],
"_id" : ObjectId("56c69da8a1f60804064abf0f")
}
因此,我可以知道是否有一种方法只返回匹配的文档?
非常感谢您的帮助,谢谢 要在子文档的数组中查找具有特定值的元素(这是您的情况)并过滤结果,您应该使用聚合框架。用一个简单的查找文档是不可能的
您可以在这里看到一个问题示例:要在子文档的数组中查找具有特定值的元素(这是您的情况)并过滤结果,您应该使用聚合框架。用一个简单的查找文档是不可能的
您可以在这里看到一个问题示例:您可以通过
你可以通过
您好@zangw谢谢您的回复,我可以知道是否可以在$match中使用$in来匹配更多文档吗?像['B','H',然后返回匹配document@JohnLim,是的,您可以这样做,{$match:{'deal_details.deals_tag':{$in:['B','H']}}}
Hi@zangw谢谢您的回复,我可以知道在$match中使用$in来匹配更多文档吗?像['B','H',然后返回匹配document@JohnLim,是的,你可以这样做,{$match:{'deal_details.deals_tag':{$in:['B','H']}}
User.aggregate([{$unwind: '$deal_details'},
{$match: {'deal_details.deals_tag': 'B'}},
{$project: {deal_details: 1, _id: 0}}])