Попробуйте мое решение из https://stackoverflow.com/a/40778162/2571249
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bottomNavigationView.setOnNavigationItemSelectedListener(this);
Menu menu = bottomNavigationView.getMenu();
this.onNavigationItemSelected(menu.findItem(R.id.action_favorites));
}
[edit на основе этого теперь возможно в последних версиях]
[Обновленный ответ] Вы можете запросить следующий способ вернуть имя класса и идентификатор студента, только если они уже зарегистрированы.
db.student.find({},
{_id:0, name:1, students:{$elemMatch:{$eq:ObjectId("51780f796ec4051a536015cf")}}})
, и вы вернете то, что ожидали:
{ "name" : "CS 101", "students" : [ ObjectId("51780f796ec4051a536015cf") ] }
{ "name" : "Literature" }
{ "name" : "Physics", "students" : [ ObjectId("51780f796ec4051a536015cf") ] }
[Исходный ответ] В настоящее время невозможно сделать то, что вы хотите сделать. Это несчастливо, потому что вы могли бы это сделать, если бы ученик был сохранен в массиве как объект. На самом деле, я немного удивлен, что вы используете только ObjectId (), так как всегда требует от вас поискать учеников, если вы хотите отобразить список студентов, обучающихся по определенному курсу (смотрите (1) Если вы сохранили (в качестве примера) идентификатор и имя в массиве курсов, например:
g5]
{
"_id" : ObjectId("51780fb5c9c41825e3e21fc6"),
"name" : "Physics",
"students" : [
{id: ObjectId("51780f796ec4051a536015cf"), name: "John"},
{id: ObjectId("51780f796ec4051a536015d0"), name: "Sam"}
]
}
Тогда ваш запрос будет просто:
db.course.find( { },
{ students :
{ $elemMatch :
{ id : ObjectId("51780f796ec4051a536015d0"),
name : "Sam"
}
}
}
);
Если этот ученик был зарегистрирован только в CS 101, вы вернетесь:
{ "name" : "Literature" }
{ "name" : "Physics" }
{
"name" : "CS 101",
"students" : [
{
"id" : ObjectId("51780f796ec4051a536015cf"),
"name" : "John"
}
]
}
Кажется, что оператор $in
отлично выполнит ваши цели.
Вы могли бы сделать что-то вроде этого (псевдо-запрос):
if (db.courses.find({"students" : {"$in" : [studentId]}, "course" : courseId }).count() > 0) {
// student is enrolled in class
}
В качестве альтернативы вы можете удалить предложение "course" : courseId
и вернуть набор всех классов, в которые учащийся участвовал.
course
заключается в том, что у вас есть имя ученика, хранящееся в нескольких местах, что может потенциально выйти из синхронизации. В этом случае ваш запрос вернет неполные данные. Если загрузка сервера и аппаратное обеспечение не очень растянуты, может потребоваться дополнительный запрос для получения имени. Вы все равно можете сохранить ученикаObjectId
s как объект, чтобы разрешить запрос OP:{"id":...}
– drevicko 14 March 2014 в 03:40