2011-10-21 17 views
6

मैं है निम्नलिखित दस्तावेज़ बुलाया आरक्षण:RavenDB में नेस्टेड जानकारी कैसे पूछें?

{ 
    "CustomerId": 1, 
    "Items": [ 
     { 
      "EmployeeId": "employees/1", 
      "StartTime": "2011-08-15T07:20:00.0000000+03:00", 
      "EndTime": "2011-08-15T07:40:00.0000000+03:00" 
     }, 
     { 
      "EmployeeId": "employees/1", 
      "StartTime": "2011-08-15T07:40:00.0000000+03:00", 
      "EndTime": "2011-08-15T09:10:00.0000000+03:00" 
     }, 
     { 
      "EmployeeId": "employees/3", 
      "StartTime": "2011-08-16T07:20:00.0000000+03:00", 
      "EndTime": "2011-08-16T11:35:00.0000000+03:00" 
     } 
    ] 
    "ReservedAt": "2011-10-20T15:28:21.9941878+03:00" 
} 

इसके अलावा मैं निम्नलिखित प्रक्षेपण वर्ग है

public class ReservationItemProjection 
{ 
    public string ReservationId { get; set; } 
    public string CustomerId { get; set; } 
    public string EmployeeId { get; set; } 
    public DateTime StartTime { get; set; } 
    public DateTime EndTime { get; set; } 
} 

सूचकांक और क्वेरी मुझे किस प्रकार लिख सकता हूँ अगर मैं ReservationItemProjections मिलान लगाना चाहते हैं ? उदा .:

// invalid example query: 
var matches = docs.Query<ReservationItemProjection, 
    ReservationItemProjectionsIndex>() 
    .Where(x => 
     x.EmployeeId == "employees/1" && 
     x.StartTime >= minTime && 
     x.EndTime <= maxTime) 
    .ToList(); 

कृपया ध्यान दें, मैं आरक्षण दस्तावेजों की एक सूची है, लेकिन ReservationItemProjection वस्तुओं की एक सूची प्राप्त करने की इच्छा नहीं है। documentation कहता है:

लेकिन जब किसी विशेष क्वेरी से मेल खाने वाले दस्तावेज़ प्राप्त करना उपयोगी होता है, तो हम उससे बेहतर कर सकते हैं। दस्तावेजों को स्वयं प्राप्त करने के बजाय, मैं पूर्ण दस्तावेज प्राप्त किए बिना सीधे सूचकांक से मूल्य प्राप्त करना चाहता हूं।

public class ReservationItemProjectionsIndex : 
    AbstractIndexCreationTask<Reservation, ReservationItemProjection> 
{ 
    public ReservationItemProjectionsIndex() 
    { 
     Map = reservations => 
      from reservation in reservations 
      from item in reservation.Items 
      select new 
      { 
       ReservationId = reservation.Id, 
       CustomerId = reservation.CustomerId, 
       item.EmployeeId, 
       item.StartTime, 
       item.EndTime 
      }; 
     Store(x => x.ReservationId, FieldStorage.Yes); 
     Store(x => x.CustomerId, FieldStorage.Yes); 
     Store(x => x.EmployeeId, FieldStorage.Yes); 
     Store(x => x.StartTime, FieldStorage.Yes); 
     Store(x => x.EndTime, FieldStorage.Yes); 
    } 
} 

किसी तरह मैं क्वेरी और सूचकांक काम कर नहीं मिल सकता है: यह या तो एक अपवाद के बारे में को ReservationItemProjection से कास्ट करने के लिए सक्षम नहीं होने के फेंकता

मैं पहले से ही इस तरह एक सूचकांक का उपयोग कर की कोशिश की है आरक्षण या, जब मैं आरक्षण ItemProjection ऑब्जेक्ट्स प्राप्त करने में सक्षम हूं, तो उनके पास होगा सभी आरक्षणों में सभी आइटम शामिल हैं जिनमें एक मिलान आइटम भी है, यहां तक ​​कि हालांकि मेरी क्वेरी में कहां क्लॉज x.EmployeeId == "कर्मचारी/1 "।

सारांश: आवश्यक सूचकांक क्या है? क्या इंडेक्स को केवल एक नक्शा क्लॉज की आवश्यकता होती है या कम या ट्रांसफॉर्म रिजल्ट भी चाहिए? मैं सी # में क्वेरी कैसे लिखूं?

उत्तर

8

कास्पर, रावेनडीबी में, आप दस्तावेज़ के लिए पूछताछ कर रहे हैं। हालांकि, जो भी आप चाहते हैं वह करने के लिए तकनीकी रूप से संभव है, लेकिन ऐसा करने के लिए आमतौर पर अर्थहीन होता है, क्योंकि अनुमानित जानकारी के साथ कुछ करने के लिए आवश्यक संदर्भ नहीं होता है।

क्या यह संभव है कि आप क्या करने की कोशिश कर रहे हैं?

from doc in docs.Items 
from reservation in doc.Reservations 
select new { reservation.EmployeeId, reservation.Start, reservation.End } 

फिर, निशान EmployeeID, आरंभ और स्टोर के रूप में अंत:

संदर्भ के लिए, सूचकांक की तरह कुछ होगा।

अब, आपकी क्वेरी, अंक में:

session.Query<...,...>().AsProjection<ReservationProjection>().ToList(); 

AsProjection कॉल करने देगा डीबी पता है कि तुम सूचकांक से मान चाहते हैं, दस्तावेज़ नहीं

+0

यही परिणाम मैं देख रहा था दे दी है के लिये! AsProjection एक उन्नत सुविधा माना जाता है? Google केवल [ravendb AsProjection] (http://www.google.com/search?q=ravendb+asprojection) पर परिणामों के दो पृष्ठ लौटाता है। ऐसा लगता है कि फीचर को कुछ दस्तावेज की आवश्यकता होगी? –

+0

धन्यवाद, यह उत्तर आज मेरे जीवन को बचाओ! –

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