I have 3 collections(User, Credit and Status). Every User have 1 Credit data and Many Status Data like this:
Users Document
<code>[
{
"_id": ObjectId("123"),
"Name": "First User"
},
{
"_id": ObjectId("1234"),
"Name": "Second User"
},
{
"_id": ObjectId("12345"),
"Name": "Third User"
}
]
</code>
<code>[
{
"_id": ObjectId("123"),
"Name": "First User"
},
{
"_id": ObjectId("1234"),
"Name": "Second User"
},
{
"_id": ObjectId("12345"),
"Name": "Third User"
}
]
</code>
[
{
"_id": ObjectId("123"),
"Name": "First User"
},
{
"_id": ObjectId("1234"),
"Name": "Second User"
},
{
"_id": ObjectId("12345"),
"Name": "Third User"
}
]
Credit Document
<code>[
{
"_id": ObjectId("456"),
"userId": ObjectId("123"),
"credit": 100
},
{
"_id": ObjectId("456"),
"userId": ObjectId("1234"),
"credit": 10
},
{
"_id": ObjectId("456"),
"userId": ObjectId("12345"),
"credit": 100
}
]
</code>
<code>[
{
"_id": ObjectId("456"),
"userId": ObjectId("123"),
"credit": 100
},
{
"_id": ObjectId("456"),
"userId": ObjectId("1234"),
"credit": 10
},
{
"_id": ObjectId("456"),
"userId": ObjectId("12345"),
"credit": 100
}
]
</code>
[
{
"_id": ObjectId("456"),
"userId": ObjectId("123"),
"credit": 100
},
{
"_id": ObjectId("456"),
"userId": ObjectId("1234"),
"credit": 10
},
{
"_id": ObjectId("456"),
"userId": ObjectId("12345"),
"credit": 100
}
]
Status Document
<code>[
{
"_id": ObjectId("111"),
"userId": ObjectId("123"),
"status": "First User Status",
"useCredit": 1
},
{
"_id": ObjectId("222"),
"userId": ObjectId("1234"),
"status": "Second User Status",
"useCredit": 20
},
{
"_id": ObjectId("222"),
"userId": ObjectId("1234"),
"status": "Second User Status",
"useCredit": 10
},
{
"_id": ObjectId("333"),
"userId": ObjectId("12345"),
"status": "Third User Status",
"useCredit": 3
},
{
"_id": ObjectId("444"),
"userId": ObjectId("12345"),
"status": "Third User Status",
"useCredit": 4
},
{
"_id": ObjectId("555"),
"userId": ObjectId("12345"),
"status": "Third User Status",
"useCredit": 2
},
{
"_id": ObjectId("666"),
"userId": ObjectId("12345"),
"status": "Third User Status",
"useCredit": 2
}
]
</code>
<code>[
{
"_id": ObjectId("111"),
"userId": ObjectId("123"),
"status": "First User Status",
"useCredit": 1
},
{
"_id": ObjectId("222"),
"userId": ObjectId("1234"),
"status": "Second User Status",
"useCredit": 20
},
{
"_id": ObjectId("222"),
"userId": ObjectId("1234"),
"status": "Second User Status",
"useCredit": 10
},
{
"_id": ObjectId("333"),
"userId": ObjectId("12345"),
"status": "Third User Status",
"useCredit": 3
},
{
"_id": ObjectId("444"),
"userId": ObjectId("12345"),
"status": "Third User Status",
"useCredit": 4
},
{
"_id": ObjectId("555"),
"userId": ObjectId("12345"),
"status": "Third User Status",
"useCredit": 2
},
{
"_id": ObjectId("666"),
"userId": ObjectId("12345"),
"status": "Third User Status",
"useCredit": 2
}
]
</code>
[
{
"_id": ObjectId("111"),
"userId": ObjectId("123"),
"status": "First User Status",
"useCredit": 1
},
{
"_id": ObjectId("222"),
"userId": ObjectId("1234"),
"status": "Second User Status",
"useCredit": 20
},
{
"_id": ObjectId("222"),
"userId": ObjectId("1234"),
"status": "Second User Status",
"useCredit": 10
},
{
"_id": ObjectId("333"),
"userId": ObjectId("12345"),
"status": "Third User Status",
"useCredit": 3
},
{
"_id": ObjectId("444"),
"userId": ObjectId("12345"),
"status": "Third User Status",
"useCredit": 4
},
{
"_id": ObjectId("555"),
"userId": ObjectId("12345"),
"status": "Third User Status",
"useCredit": 2
},
{
"_id": ObjectId("666"),
"userId": ObjectId("12345"),
"status": "Third User Status",
"useCredit": 2
}
]
I want to get random Status with:
- userId of Status not equal with User “_id”
- User Credit equal or greater than useCredit of Status
Example:
If First User do query, he will get one random data from Status Document except “_id: 111″(because own status) and “_id: 222” (because, credit not enough).
I am thinking using aggregate but I don’t figure out how to do it..