2012-05-07 14 views
7

मैं निर्दिष्ट समय के भीतर बनाए गए सभी दस्तावेज़ ढूंढने की कोशिश कर रहा हूं। मैं सी # और mongodb सी # ड्राइवर का उपयोग कर रहा हूँ।मोंगोडीबी और डेटटाइम ऑफसेट प्रकार

मेरे इकाई इस प्रकार है:

public class Entity 
{ 
    public Gid Id { get; private set; } 
    public DateTimeOffset CreationTimestamp { get; private set; } 
    public Entity() 
    { 
    } 
} 

तो मैंने सोचा कि मैं यह कर सकता है:

DateTime compareTime = DateTime.UtcNow.AddMinutes(-15); 
var result = _collection.Find(Query.GT("CreationTimestamp", compareTime)).Count(); 

परिणाम शून्य की गिनती भले ही संग्रह में डेटा है। यदि मैं डेटटाइम ऑफसेट से डेटटाइम में बदलता हूं तो मुझे परिणाम मिल जाएगा।

क्या समस्या है कि डेटटाइम ऑफसेट प्रकार समर्थित नहीं है? यदि ऐसा है तो मुझे इसके आसपास एक तरीका है क्योंकि मुझे डेटटाइम ऑफसेट का उपयोग करने के लिए मेरी इकाइयों की आवश्यकता है?

+0

अद्यतन दिनांक समय.अब। AddMinutes (-15); DateTime.UtcNow.AddMinutes (-15); – Noel

उत्तर

11

डेटटाइम ऑफसेट को दिनांक के रूप में क्रमबद्ध नहीं किया गया है, लेकिन (डिफ़ॉल्ट रूप से), [टिक, टाइमज़ोन ऑफसेट] की सरणी के रूप में। इस प्रकार, आप इसे सामान्य तरीके से उसी तरह से पूछ नहीं सकते हैं। इसके बजाए, हम टिकों के आधार पर पूछेंगे। आपको यह सुनिश्चित करना होगा कि आपका टाइमज़ोन ऑफसेट समान है, अन्यथा यह काम नहीं करेगा।

DateTimeOffsett compareTime = DateTimeOffsett.UtcNow.AddMinutes(-15); 
var result = _collection.Find(Query.GT("CreationTimestamp.0", compareTime.Ticks)).Count(); 

असल में, हम टिक गणना के साथ संग्रहीत सरणी के पहले तत्व की तुलना करने जा रहे हैं। इस जवाब पर पहुंचने के लिए फिर से खेद है।

+0

क्रेग, जब मैं FindAll() का उपयोग करता हूं, तो मेरे दस्तावेज़ से पुनर्प्राप्त मेरे CreationTimestamp {07/05/2012 16:39:20 +01: 00} है। जब मैं एक क्वेरी करता हूं। जीटी ("क्रिएशन टिमस्टैम्प", तुलना समय)। टोज़सन(); मेरा मान "{\" CreationTimestamp \ "है: {\" $ gt \ ": ISODate (\" 2012-05-07T15: 24: 29.037Z \ ")}}" तो मैं उम्मीद करता हूं कि यह दस्तावेज़ – Noel

+0

हां मुझे डेटटाइम ऑफसेट – Noel

+0

ठीक है, मैंने जवाब अपडेट किया है। –

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