mongodb中的数据引用

时间:2013-02-15 05:30:55

标签: c# mongodb

我有两个模型calss用户和产品,我有共同的属性productId。我想从Mongodb获取用户数据。我想获取用户coreesponding到他下面应该显示的产品。

用户模型

公共类用户:产品     {

    [BsonId] 
    public string GuId { get; set; }

    public string Name { get; set; }

    public string EMailAddress { get; set; }


    public  string ProductId { get; set; }


} 

产品型号

公共类产品     {

    [BsonId]
    public int Id { get; set; }
    public string ProductId { get; set; }

    public string  ProductName { get; set; }
}

我的应用程序层有以下代码: -

   public IEnumerable<User> GetAllUsers()
    {
        // var users = new User();
        IList<User> itemCollection = new List<User>();
        var itemIdList = new List<string>();
        itemCollection = _users.Include<User>.Load(itemIdList.ToArray())

                                    .OrderByDescending(x => x.LastUpdatedDate).ToList();

       // var itemCollection = _users.Load<User>(itemIdList.ToArray());

        this.LoadItemStatusDefinitions(itemCollection);

        var users = _users.
                         FindAll().
                         SetSortOrder(SortBy.Descending("createdate"));

        return users;
    }

    private void LoadItemStatusDefinitions(IEnumerable<User> items)
    {
        // iterates through each items in the collection.
        foreach (var item in items)
        {
            // check whether status definition is already assigned to the item 
            if (!string.IsNullOrEmpty(item.ProductId))
            {
                // loading the status definition associated with each item
                var statusDefinition = _users.Load<Product>(item.ProductId);
                if (statusDefinition != null)
                {
                    // assign the status definition to the item.
                    item.ProductId = statusDefinition;
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

您的模型看起来设计时考虑了关系数据库。 MongoDB siteschema design上拥有良好的资源。尝试为MongoDB设计一个好的文档模式绝对是一种不同的心态。不要害怕对数据进行反规范化。

一种可能的架构可能是:

{
    GuID: "",
    Name: "",
    EMailAddress: "",
    Product: {
        Id: 0,
        ProductId: "",
        Name: ""
    }
}

目前还不清楚是否需要在产品子文档中包含两个id字段。