это действительно зависит от того, как ваше приложение будет запрашивать данные.Однако мое личное эмпирическое правило - не вставлять, если там будет более нескольких сотен объектов / документов.Также вы должны иметь в виду ограничение размера документа 16 МБ на mongodb.если существует вероятность создания миллионов объектов определенного типа, было бы лучше сохранить их в своей собственной коллекции и иметь ссылки на них от связанных объектов.
вот пример ac # того, как я 'сделал бы это для сценария, который вы дали:
using MongoDB.Entities;
using System.Linq;
namespace StackOverflow
{
public class Program
{
public class User : Entity
{
public One<Address> Address { get; set; }
public string Name { get; set; }
}
public class Address : Entity
{
public Many<User> Users { get; set; }
public string Street { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
public string Country { get; set; }
public Address() => this.InitOneToMany(() => Users);
}
private static void Main(string[] args)
{
// init connection
new DB("test", "127.0.0.1");
// create address
var address = new Address
{
Street = "4616 Greenwood Pl",
City = "Los Angeles",
State = "CA",
ZipCode = "90027",
Country = "USA"
}; address.Save();
// create first user
var user1 = new User
{
Name = "Amanda Woodward",
Address = address.ToReference(),
}; user1.Save();
// create second user
var user2 = new User
{
Name = "Billy Campbell",
Address = address.ToReference(),
}; user2.Save();
// link the users to the address
address.Users.Add(user1);
address.Users.Add(user2);
// find all users who live at a given address
var result1 = DB.Queryable<User>()
.Where(u => u.Address.ID == address.ID)
.ToList();
// find address of a given user
var result2 = DB.Queryable<User>()
.Where(u => u.Name == "Amanda Woodward")
.Select(u => u.Address)
.First()
.ToEntity();
// find a particular user at an address
var result3 = address.Users.ChildrenQueryable()
.Where(u => u.Name == "Billy Campbell")
.First();
// find all users living on a given street
var addressIDs = DB.Queryable<Address>()
.Where(a => a.Street.Contains("Greenwood Pl"))
.Select(a => a.ID)
.ToArray();
var result4 = DB.Queryable<User>()
.Where(u => addressIDs.Contains(u.Address.ID))
.ToList();
}
}
}