0
に一つだけの要素でそれを取得:のMongoDB - だから私はMongoDBの中で、このデータを持って呼ばれた文書を検索し、その内側の配列
プロセスの文書:
process: {
procnumber: '1',
person: {
$ref: 'person',
$id: ObjectId("5126bc054aed4daf9e2ab772")
}
}
process: {
procnumber: '2',
person: {
$ref: 'person',
$id: ObjectId("5126bc054aed4daf9e2ab996")
}
}
ユーザー文書:
person: {
_id: ObjectId("5126bc054aed4daf9e2ab772"),
name:'person_1',
obsarray:[{date:ISODate("2017-02-13"),obs:'1.this is one'},{date:ISODate("2017-02-20"),obs:'1.this is two'},{date:ISODate("2017-02-01"),obs:'1.this is three'}]
}
person: {
_id: ObjectId("5126bc054aed4daf9e2ab996"),
name:'person_2',
obsarray:[{date:ISODate("2017-02-17"),obs:'2.this is one'},{date:ISODate("2017-02-27"),obs:'2.this is two'},{date:ISODate("2017-02-28"),obs:'2.this is three'}]
}
を
そして、クエリがプロセスと人物の両方のフィールドを返すようにクエリを作成したいと同時に、obsarrayは最新の日付のドキュメントのみを返すようにします。所望の出力の 例:
{
procnum:'1',
person: {
name:'person_1',
obsarray: {
date:ISODate("2017-02-20"),
obs:'1.this is two'
}
}
しかし私は、私が参照して対処することができなかった、集約を使用して試してみた:
db.person.aggregate([
{$match:{name:{$exists:true}}},
{$unwind:'$obsarray' },
{$sort:{'obsarray.date':-1}},
{$group:{
_id:'$_id',
obsarray:{$first: '$obsarray.date'},
name:{$first:'$name'}}
}
])
がから「人のREFを移入する方法はあります'Process'を実行し、両方のドキュメントのフィールドを出力するように集計を適用しますか?