2016-06-23 11 views
0

サブ文書の数を特定の日付よりも大きくするにはどうしたらいいですか? 次のモデルがあるとします。特定の日付よりも大きいチャット数を取得したいと考えていました。私はすでにMongodbは特定のフィールドの数を取得します

   Model.count({ 
       $and: [ 
        { 'chats.createdDateTime': {$lt: '2016-06-22T10:03:21.879Z' } }, { '_id':messages[index]._id } 
       ] 
      }) 

で試してみた

model = { 
"chats" : [ 
    { 
     "comment" : "hi", 
     "_id" : ObjectId("576a2107aa7940f029ce6547"), 
     "createdDateTime" : ISODate("2016-06-22T05:24:23.422Z") 
    }, 
    { 
     "comment" : "asdasdsa", 
     "_id" : ObjectId("576a2367aa7940f029ce6548"), 
     "createdDateTime" : ISODate("2016-06-22T05:34:31.628Z") 
    }, 
    { 
     "comment" : "dsadasd", 
     "_id" : ObjectId("576a2369aa7940f029ce6549"), 
     "createdDateTime" : ISODate("2016-06-22T05:34:33.354Z") 
    }, 
],} 

はまた、いくつかの他の類似の方法を試してみました。 誰でも私を助けることができますか?

可能であれば、集約フレームワークを使用しないでください。

+0

私は集計なしではできないと思います。 – Shrabanee

+0

大丈夫ですが、ここで私はデータのリストを持っており、特定の日付の後に各リストのチャットを数える必要があります。あなたは方法を提案できますか? –

+0

使用しているmongodbのバージョンは? – Shrabanee

答えて

0

は代わりにStringDataを使用してみてください:

Model.count({ 
      $and: [ 
       { 'chats.createdDateTime': {$lt: new Date() } }, 
       { '_id':messages[index]._id } 
      ] 
     }) 
+0

'new Data()'とは何ですか? – Shrabanee

+0

申し訳ありませんが間違っています、私は 'new Date()'を意味します。 –

+0

これは、私が考える質問に記載されている問題の解決には役立ちません。条件に合致するオブジェクトのみを投影するのではなく、 'chats'配列のすべてのオブジェクトを投影します。 – Shrabanee

0

あなたがaggreagteを使用しても大丈夫な場合は、次のクエリはあなたを助けるかもしれない: -

var date = '2016-06-22T10:03:21.879Z', 

db.collection.aggregate([ 
{ 
    "$match": { 
     "chats.createdDateTime": { "$gt": date} 
    } 
}, 
{ 
    "$project": { 
     "chats": { 
      "$filter": { 
       "input": "$chats", 
       "as": "o", 
       "cond": { 
        "$gt": [ "$$o.createdDateTime", date ] },    
        ] 
       } 
      } 
     } 
    } 
}]) 

クエリを使用することにより、chatsのみが含まれています指定された条件に一致するオブジェクト。

今度は、各文書からchats配列の長さを取ることができます。

願っています。

関連する問題