您好我想在联系人对象中获取syncFlag的所有联系人。
I tried this solution but only returns only one sub document
我也试过这个解决方案,它会返回所有匹配的文件
How to find document and single subdocument matching given criterias in MongoDB collection
以下是示例文档
{
"_id" : ObjectId("57ce7d6c7387d533bfa2d45c"),
"ITBCompanyId" : 2608,
"updatedAt" : ISODate("2016-09-06T12:19:35.972Z"),
"createdAt" : ISODate("2016-09-06T08:25:16.325Z"),
"name" : "This is test",
"identifier" : "THDNOM2",
"addressLine1" : "Valencia Lahore",
"syncFlag" : true,
"orgId" : "1",
"deletedAt" : null,
"whois" : [
{
"test" : "noman"
}
],
"configuration" : [
{
"test" : "noman"
}
],
"contact" : [
{
"firstName" : "Active",
"_id" : ObjectId("57ceb04811f005420b7ed54a"),
"syncFlag" : false,
"communicationItems" : [],
"customFields" : []
},
{
"firstName" : "Active",
"_id" : ObjectId("57ceb04811f005420b7ed54b"),
"syncFlag" : false,
"communicationItems" : [],
"customFields" : []
},
{
"firstName" : "Active",
"_id" : ObjectId("57ceb44b5f8b534bc312aacd"),
"syncFlag" : true,
"communicationItems" : [],
"customFields" : []
},
{
"firstName" : "Active",
"_id" : ObjectId("57ceb457f141fd4c1c98a748"),
"syncFlag" : true,
"communicationItems" : [],
"customFields" : []
}
],
"agreement" : [
{
"test" : "noman"
}
],
"companySite" : [
{
"test" : "noman"
}
],
"companyNote" : [
{
"test" : "noman"
}
],
"type" : {
"name" : "Client"
},
"status" : {
"name" : "Active"
},
"id" : "19493",
"__v" : 0,
"_info" : {
"updatedBy" : "Omer",
"lastUpdated" : ISODate("2016-09-06T11:52:07.000Z")
}
}
预期产出:
ITBCompanyId: 1,
contact: [{
"firstName" : "Active",
"_id" : ObjectId("57ceb04811f005420b7ed54b"),
"syncFlag" : true,
"communicationItems" : [],
"customFields" : []
}]
答案 0 :(得分:0)
试试这个。您应该根据需要获取文档。下面我使用了一个聚合查询来根据需要格式化mongodb响应。有关mongodb聚合的更多信息,请参阅this。为了形成这个查询,我提到了this堆栈溢出帖子。
db.companies.aggregate(
{ $match: {"contact.syncFlag": true }},
{ $unwind: '$contact'},
{ $match: {"contact.syncFlag": true }},
{ $group: {
_id: '$_id',
contact: {$push: '$contact'},
}
});
如果您希望文档中包含所有其他字段。你可以试试这个。
db.companies.aggregate(
{ $match: {"contact.syncFlag": true }},
{ $unwind: '$contact'},
{ $match: {"contact.syncFlag": true }},
{ $group: {
_id: '$_id',
ITBCompanyId: {$first: '$ITBCompanyId'},
updatedAt: {$first: '$updatedAt'},
createdAt: {$first: '$createdAt'},
name: {$first: '$name'},
identifier: {$first: '$identifier'},
addressLine1: {$first: '$addressLine1'},
syncFlag: {$first: '$syncFlag'},
orgId: {$first: '$orgId'},
deletedAt: {$first: '$deletedAt'},
whois: {$first: '$whois'},
configuration: {$first: '$configuration'},
contact: {$push: '$contact'},
agreement: {$first: '$agreement'},
companySite: {$first: '$companySite'},
companyNote: {$first: '$companyNote'},
type: {$first: '$type'},
status: {$first: '$status'},
id: {$first: '$id'},
_info: {$first: '$_info'},
}
});