2012-02-29 110 views
1

我使用流利的mongo。Mongo查詢獲取兒童

我有一個實體

public class SomeList 
{ 
     public List<ItemLike> Likes { get; set; } 
     public List<ItemComment> Comments { get; set; } 
     public List<ListItem> ListItems { get; set; } 
} 

的列表項是另一個實體

public class ListItem 
{ 
     pub string ListItemId { get; set; } 
     public List<ItemComment> CommentsList { get; set; } 
     public List<Photo> ItemPhotos { get; set; } 
} 

所以主要實體SomeList有清單,並列表項具有列表的實體。

我想要一個mongo查詢來從ListItem中獲取List。

我使用的是下面的查詢

var myCollection = GetMongoDatabase().GetCollection<SomeList>("SomeLists"); 
var list = myCollection.Find(Query.EQ("ListItems.ListItemId", listItemId)).SetFields(Fields.Slice("ListItems.LikesList", 0)).SingleOrDefault(); 

ListItem listItem = list.ListItems.Where(x => x.ListItemId == listItemId).SingleOrDefault(); 
items = listItem.CommentsList; 

當我做Query.EQ(「ListItems.ListItemId」,listItemId),它給出了主要SomeList實體。 我再次應用下一行中的where子句。我不想要的。

回答

1

因此,您正在創建列表中返回的主SomeList集合嗎?

var list = myCollection.Find(Query.EQ("ListItems.ListItemId", listItemId)) 
      .SetFields(Fields.Slice("ListItems.LikesList", 0)).SingleOrDefault(); 

如果您從中刪除SingleOrDefault()來電,您會得到什麼?

+0

即使它然後它給主要實體。 – 2012-02-29 18:32:22

+0

如果您移除切片,返回什麼? 'var list = myCollection.Find(Query.EQ(「ListItems.ListItemId」,listItemId));' 你回來了什麼 - 這個查詢是否按預期工作? – Gregor 2012-03-01 10:21:49