私はMongo
初心者ですので、これは簡単な質問かもしれません。私と一緒にご負担願います:)すべてのサブ文書が条件と一致するMongoDB文書を入手してください
私Mongo
文書は、論理的に有効とアーカイブ文書にグループ化することができます。 のrevisions.validTo
の日付フィールドがnull
または今日より大きい場合、ドキュメントは有効です。それ以外の場合、ドキュメントはアーカイブにあります。
だからコレクションの構造はおおよそ次のとおりです。
[
{
_id: 'valid-1',
info: 'This is valid document because it has a revision with null validTo value',
revisions: [
{
validTo: ISODate("2014-01-01T00:00:00.000Z")
},
{
validTo: null
}
]
},
{
_id: 'valid-2',
info: 'This is valid document because it has a revision with validTo value > today',
revisions: [
{
validTo: ISODate("2014-01-01T00:00:00.000Z")
},
{
validTo: ISODate("2050-01-01T00:00:00.000Z")
}
]
},
{
_id: 'archive-1',
info: 'This document is in archive as all revisions have validTo < today',
revisions: [
{
validTo: ISODate("2014-01-01T00:00:00.000Z")
}
]
}
]
私は簡単に[valid-1, valid-2]
返し
db.getCollection('collection').find({
$or: [
{ 'revisions.validTo': { $gte: new Date() } },
{ 'revisions.validTo': null }
]
})
と妥当な文書を照会することができますが、私はアーカイブを照会する方法を見つけることができません結果を得るための文書[archive-1]
。それが今日validTo
<を持つ任意のリビジョンを持っている場合たとえば、
db.getCollection('collection').find({
'revisions.validTo': { $lte: new Date() }
})
は、ドキュメントを返します。その代わりに、ののrevisions.validTo
が今日は<の場合にのみ、私は文書を取得したいと考えています。
コレクションがこれらの2つのグループに正確に分かれているので、有効なグループを照会し、コレクション全体と有効なドキュメントセットを差し引いてアーカイブグループを取得することもできます。これはおそらくMongo集約フレームワークで行うことができますが、私はまだそれを行う方法を見つけることができませんでした。
したがって、アーカイブ文書のクエリを構築する際の助けは大歓迎です!
(つまり、何とか助けることができれば、私はまた、マングースを使用しています..?)
を返すこと。あなたの期待している結果は何ですか? – styvane
私は 'ISODate'を使うためにサンプルコレクションを編集しました。期待される出力についてもう少し説明を加えました。 – ronkot