Использование идентификаторов объектов в BsonArrays в качестве ссылки на объекты - отличный способ, а также рассмотрите возможность использования BsonDocuments в пределах «object_ids» самого пользователя, тогда вы сможете легче масштабировать его и использовать «_id» (ObjectID), чтобы MongoDB индексировал эти идентификаторы, это повысит производительность.
В конечном итоге у вас будет 2 коллекции, одна с пользователями, а другая с объектами:
user:
{
"_id" : "user_id",
"firstname" : "John",
"lastname" : "Doe",
"object_ids" : [
{ "_id" : "26548" , "futurefield" : "futurevalue" },
{ "_id" : "26564" , "futurefield" : "futurevalue" }
]
}
В настоящий момент я действительно не знаю, какие это будут объекты ... но могу привести пример:
workshop object:
{
"_id>" : "user_id",
"name" : "C# for Advanced Users",
"level" : "300",
"location" : "Amsterdam, The Netherlands",
"date" : "2013-05-08T15:00:00"
}
Теперь самое интересное, и это вопрос.
Я занимаюсь разработкой на C # и использую драйвер с mongodb.org.
Пример:
Дайте мне всех, у кого есть объект id == "26564".
var query = from user in userCollection.Find(Query.EQ("objects_ids._id","26564"))
select user;
Этот запрос вернет документы, в данном случае это пользователи, которые соответствуют идентификатору.
Если у вас есть диапазон значений, пожалуйста, используйте: Query.All ("name", "BsonArray Values");
Второй запрос - найти и / или сопоставить идентификаторы идентификаторов объектов, которые могут содержать BsonDocuments.
var secondQuery =
from workshops in objectsCollection.Find(Query.EQ("_id", "userid"))
select cust["object_ids"].AsBsonArray.ToArray();
Я надеюсь, что помог вам таким образом.
Удачи с этим!