2012-11-26 4 views
6

मैं मोंगोडीबी में नया हूं और मैं समेकन के साथ काम करने की कोशिश कर रहा हूं। मैं आंशिक रूप से वह करता हूं जो मैं ढूंढ रहा हूं लेकिन मेरे पास तिथियों के साथ एक अजीब व्यवहार है।

MongoDB जानकारी

संस्करण: 2.2.0

ऑपरेटिंग सिस्टम: Windows 7

उद्देश्य

सभी टिप्पणियों बनाया हो जाओ पीछे

डाटा

db.blogs.save([ { 
    title : "X this is my second title", 
    author : "max", 
    posted : new Date(), 
    pageViews : 10, 
    tags : [ "good", "nice" ], 
    comments : [ { 
     "_id" : ObjectId("50ac9fdb53a900bcb4be46d9"), 
     author : "john", 
     text : "pretty awesome", 
     create : ISODate("2012-12-20T00:00:00.000Z") 
    }, { 
     "_id" : ObjectId("50ac9fd003a900bcb4be46d9"), 
     author : "sam", 
     text : "this is bad", 
     create : ISODate("2012-12-22T00:00:00.000Z") 
    } ], 
    other : { 
     foo : 5 
    } 
}, { 
    title : "X this is my title", 
    author : "bob", 
    posted : new Date(), 
    pageViews : 5, 
    tags : [ "fun", "good", "fun" ], 
    comments : [ { 
     "_id" : ObjectId("50ac55db53a900bcb4be46d9"), 
     author : "matthieu", 
     text : "bof bof", 
     create : ISODate("2012-12-21T00:00:00.000Z") 
    }, { 
     "_id" : ObjectId("50ac55db53a900bcb4b226d9"), 
     author : "sam", 
     text : "this s bad", 
     create : ISODate("2012-12-22T00:00:00.000Z") 
    } ], 
    other : { 
     foo : 6 
    } 
}, { 
    title : "X NEW ELEMENT", 
    author : "emil", 
    posted : new Date(), 
    pageViews : 33, 
    tags : [ "bad", "hehe", "cool", "nice" ], 
    comments : [ { 
     "_id" : ObjectId("50ac55db531100bcb4b226d9"), 
     author : "emilie", 
     text : "could be better", 
     create : ISODate("2012-12-21T00:00:00.000Z") 
    }, { 
     "_id" : ObjectId("50ac55db101100bcb4b226d9"), 
     author : "samuel", 
     text : "maybe a good one", 
     create : ISODate("2012-12-20T00:00:00.000Z") 
    } ], 
    other : { 
     foo : 9 
    } 
}, { 
    title : "X Y NEW ELEMENT", 
    author : "marc", 
    posted : new Date(), 
    pageViews : 33, 
    tags : [ "bad", "hehe", "cool", "nice" ], 
    comments : [ { 
     "_id" : ObjectId("50ac55db101100bcb4baa6d9"), 
     author : "sam", 
     text : "hehe", 
     create : ISODate("2012-11-20T00:00:00.000Z") 
    }, { 
     "_id" : ObjectId("50ac55db101ab0bcb4baa6d9"), 
     author : "daniel", 
     text : "yeehhhh hoho", 
     create : ISODate("2012-11-23T00:00:00.000Z") 
    } ], 
    other : { 
     foo : 9 
    } 
} ]) 

उदाहरण 1:: मिलान तार

वापसी के साथ ठीक एर '2012-11-22'

एक उदाहरण लेते हैं उपयोगकर्ता 'सैम' से सभी 'टिप्पणियां':

db.blogs.aggregate([ 
    { $unwind: "$comments" }, 
    { $match: { 'comments.author' : "sam" } }, 
    { $group: { _id: "$comments" } } 
]) 

यह केवल तभी टिप्पणी करता है जहां संपत्ति 'लेखक' 'सैम' है।


उदाहरण 2: तिथियों के साथ समस्या?

इस एकत्रीकरण पिछले एक के रूप में, लेकिन इसके बजाय 'लेखक' से मेल खाते की एक ही (मेरे लिए) है, मैं तारीख संपत्ति से मेल 'बनाएं':

db.blogs.aggregate([ 
    { $unwind: "$comments" }, 
    { $match: { 
    'comments.create' : { 
     $gt: ISODate("2012-11-22T00:00:00Z") 
    } 
    } }, 
    { $group: { _id: "$comments" } } 
]) 

लेकिन आप इस एकत्रीकरण का परीक्षण करता है, तो, आप देखेंगे कि कुछ टिप्पणियों में '2012-11-22' से कम 'बनाएं' तिथियां हैं। उदाहरण के लिए, आईडी '50ac9fdb53a900bcb4be46d9' के साथ टिप्पणी लौटा दी गई है।


मैं '2012-11-22' से अधिक तारीखों के साथ ही टिप्पणी उम्मीद होती है ... मुझे लगता है कि मैं कुछ ... याद

धन्यवाद

+6

आपके उदाहरण कोड के आधार पर, आईडी '50ac9fdb53a900bcb4be46d9 'के साथ टिप्पणी दिसंबर में दिनांक है, नवंबर नहीं:' बनाएं: ISODate (" 2012-12-20T00: 00: 00.000Z ")'। ऐसा लगता है कि सभी डिज़ाइन के रूप में काम कर रहे हैं ;-)। – Stennie

+1

बीटीडब्लू, '$ टिप्पणियां' पर समूहित करना शायद वह नहीं है जो आप यहां करना चाहते हैं; इसके बजाय आपके परिणामों में क्या शामिल है, इसे नियंत्रित करने के लिए अपनी पाइपलाइन में एक ['$ प्रोजेक्ट'] (http://docs.mongodb.org/manual/reference/aggregation/project/#_S_project) ऑपरेशन का उपयोग करने का प्रयास करें। – JohnnyHK

उत्तर

4

हो मेरे भगवान! स्टेनी सही है। यह नवम्बर और न दिसम्बर है ...

अगर मैं 2012-12-21T00:00:00Z डाल यह काम कर रहा ... ^^

Btw, के रूप में JohnnyHK ने कहा कि यह आपरेशन इस तरह से करने के लिए हो सकता है बेहतर है:

db.blogs.aggregate([ 
    { $project : { 'comments' : 1 } }, 
    { $unwind: "$comments" }, 
    { 
     $match: { 
      'comments.create' : { 
       $gt: ISODate("2012-12-21T00:00:00Z") 
      } 
     } 
    } 
]) 

$group का उपयोग किए बिना, लेकिन $project का उपयोग करके ऐसा लगता है कि मैं जो चाहता हूं उसे प्राप्त करता हूं।

आपकी प्रतिक्रियाओं के लिए बहुत बहुत धन्यवाद!

संबंधित मुद्दे