私は要素のサブコレクションを持っています。このコレクションの最初のアイテムの特定のサブフィールドを投影したいと思います。私は以下を持っていますが、配列内のすべての要素のフィールドしか投影しません。Mongo集約、配列内の最初の要素のサブフィールドを投影
ItemsはOrdersのサブコレクションであり、各ItemオブジェクトにはDetailsサブオブジェクトとその下にItemNameがあります。リスト内の最初の項目の項目名のみを返したいとします。これは、リスト内の各項目の項目名を返します。
どうすれば調整できますか?
db.getCollection('Orders').aggregate
([
{ $match : { "Instructions.1" : { $exists : true }}},
{ $project: {
_id:0,
'UserId': '$User.EntityId',
'ItemName': '$Items.Details.ItemName'
}
}
]);
更新日:あなたは、少なくとものMongoDB V3.2を使用している場合は
{
"_id" : "order-666156",
"State" : "ValidationFailed",
"LastUpdated" : {
"DateTime" : ISODate("2017-09-26T08:54:16.241Z"),
"Ticks" : NumberLong(636420128562417375)
},
"SourceOrderId" : "666156",
"User" : {
"EntityId" : NumberLong(34450),
"Name" : "Bill Baker",
"Country" : "United States",
"Region" : "North America",
"CountryISOCode" : "US",
},
"Region" : null,
"Currency" : null,
"Items" : [
{
"ClientOrderId" : "18740113",
"OrigClientOrderId" : "18740113",
"Quantity" : NumberDecimal("7487.0"),
"TransactDateTime" : {
"DateTime" : Date(-62135596800000),
"Ticks" : NumberLong(0)
},
"Text" : null,
"LocateRequired" : false,
"Details" : {
"ItemName" : "Test Item 1",
"ItemCost" : 1495.20
}
},
{
"ClientOrderId" : "18740116",
"OrigClientOrderId" : "18740116",
"Quantity" : NumberDecimal("241.0"),
"TransactDateTime" : {
"DateTime" : Date(-62135596800000),
"Ticks" : NumberLong(0)
},
"Text" : null,
"LocateRequired" : false,
"Details" : {
"ItemName" : "Test Item 2",
"ItemCost" : 2152.64
}
}
]
}
てみ '{ 'ItemNameの':{$のarrayElemAt:[ '$ Items.Details.ItemName'、0]}}' [あなたはMongoDBの投影集合内の特定の配列の項目にアクセスするにはどうすればよいの – Veeram
可能な重複? ](https://stackoverflow.com/questions/30997736/how-do-you-access-a-specific-array-item-in-mongodb-projection-aggregation) – Veeram