我正试图从MongoDB的集合中获取数据,我具有以下结构:
因此,基本上我想做的事情是,例如,以<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/scrollView2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
tools:context=".MainActivity"
>
<android.support.constraint.ConstraintLayout xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/idbutton1"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#f0eb79"
android:foreground="?attr/selectableItemBackground"
android:padding="25dp"
android:text="BUTTON1"
android:textAllCaps="false"
android:textColor="#ffffff"
android:textSize="18sp"
app:layout_constraintBottom_toTopOf="@+id/idbutton3"
app:layout_constraintEnd_toStartOf="@+id/idbutton2"
app:layout_constraintHorizontal_chainStyle="spread_inside"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/idbutton2"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#000"
android:foreground="?attr/selectableItemBackground"
android:padding="25dp"
android:text="BUTTON2"
android:textAllCaps="false"
android:textColor="#ffffff"
android:textSize="18sp"
app:layout_constraintBottom_toTopOf="@+id/idbutton4"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/idbutton1"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/idbutton3"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#f0eb79"
android:foreground="?attr/selectableItemBackground"
android:padding="25dp"
android:text="BUTTON3"
android:textAllCaps="false"
android:textColor="#ffffff"
android:textSize="18sp"
app:layout_constraintBottom_toTopOf="@+id/idbutton5"
app:layout_constraintEnd_toStartOf="@+id/idbutton4"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/idbutton1" />
<Button
android:id="@+id/idbutton4"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#000"
android:foreground="?attr/selectableItemBackground"
android:padding="25dp"
android:text="BUTTON4"
android:textAllCaps="false"
android:textColor="#ffffff"
android:textSize="18sp"
app:layout_constraintBottom_toTopOf="@+id/idAppointments"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/idbutton3"
app:layout_constraintTop_toBottomOf="@+id/idbutton2" />
<Button
android:id="@+id/idbutton5"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#f0eb79"
android:foreground="?attr/selectableItemBackground"
android:padding="25dp"
android:text="BUTTON5"
android:textAllCaps="false"
android:textColor="#ffffff"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/idAppointments"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/idbutton3" />
<Button
android:id="@+id/idAppointments"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#000"
android:foreground="?attr/selectableItemBackground"
android:padding="25dp"
android:text="BUTTON6"
android:textAllCaps="false"
android:textColor="#ffffff"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/idbutton5"
app:layout_constraintTop_toBottomOf="@+id/idbutton4" />
</android.support.constraint.ConstraintLayout>
从id: 456
到最高events
为== 2的对象为目标,并仅返回该对象。
我已经尝试过_id
,aggregate()
,但是它们都无法按照我想要的方式工作...任何帮助将不胜感激。
我尝试过的示例:
findOne()
我无法更改以下结构,因为顶级_id实际上是userId,并且我想使用_id来获取用户的所有事件:例如“ 2”。
答案 0 :(得分:1)
您可以先使用_id
进行过滤,以尽可能地过滤掉。然后,您可以使用$unwind获取每个文档的单个事件,并为嵌套_id
应用另一个匹配项。在最后一步中,您可以使用$replaceRoot仅获取嵌套文档,请尝试:
Model.aggregate([
{ $match: { _id: "2" } },
{ $unwind: "$events" },
{ $match: { "events._id": "456" } },
{ $replaceRoot: { newRoot: "$events" } }
])
输出:
{ "_id" : "456", "name" : "eventName_1" }