ฉันมีปัญหากับแบบสอบถามการนับขั้นสูงกับ MongoDB
ฉันกำลังพยายามนับวัตถุ ภายใน ฟิลด์เอกสาร แต่เฉพาะเมื่อมีองค์ประกอบก่อนหน้านี้ที่ตรงกับข้อความค้นหาที่มีอยู่และ เก่ากว่า< /strong> ในอาร์เรย์
ให้ฉันอธิบาย....
ฉันมีเอกสารคอนเทนเนอร์ ดูเหมือนว่า:
{
"_id" : ...,
[...]
"objects" : [ ]
}
ภายในช่องวัตถุ:
ฉันมี เอกสารวัตถุ ดูเหมือนว่า:
[
{
"_id" : ...,
"name" : "foo",
"properties" = [ ],
"time" = 000000042
}
{
"_id" : ...,
"name" : "bar",
"properties" = [ ],
"time" = 000000424
}
{
"_id" : ...,
"name" : "baz",
"properties" = [ ],
"time" = 000004242
}
สำหรับตอนนี้ ฉันนับจำนวน เอกสารคอนเทนเนอร์ ที่มี:
จำนวน คอนเทนเนอร์ที่มีวัตถุ 1 (foo),
จำนวนของคอนเทนเนอร์ที่มีวัตถุ 1 และ 2 (foo และ bar),
จำนวน ของคอนเทนเนอร์ที่มีวัตถุ 1, 2 และ 3 (foo, bar, baz)
แต่ตอนนี้ฉันต้องการนับ foo และ bar เฉพาะในกรณีที่ bar เก่า มากกว่า foo (โดยใช้เขตข้อมูลเวลา)...
< strong>จำนวนของคอนเทนเนอร์ที่มีวัตถุ 1 (foo),
จำนวน ของคอนเทนเนอร์ที่มีวัตถุ 1 และ 2 (foo และ bar) และ foo.time ‹ bar.time
count ของคอนเทนเนอร์ที่มีอ็อบเจ็กต์ 1, 2 และ 3 (foo, bar , baz) และ foo.time ‹ bar.time ‹ baz.time
ปัญหาคือฟิลด์เวลาจำเป็นต้องเปลี่ยนสำหรับแต่ละคอนเทนเนอร์ กล่าวอีกนัยหนึ่ง: ฉันจะใช้แบบสอบถามแบบไดนามิกต่อเอกสารได้อย่างไร
นี่คือตัวอย่างโค้ด:
foreach ($COUNTER[ARRAY_FIELDS_NAME_TO_COUNT] as $key => $value)
{
// Build the query (Name & properties)
$match[$key] = array('$elemMatch' => array('name' => $value['name']));
foreach ($value['properties'] as $propertyName => $propertyValue)
$match[$key]['$elemMatch']["properties.$propertyName"] = $propertyValue;
// Time checking
if ($key > 0)
{
//FIXME with a... dynamics query searching inside current doc??
// or a special var set to the previous object matched... or MapReduce..
}
// Make the query
$query = array('objects' => array('$all' => $match));
$result[$key]['count'] = $db->person->count($query);
}
ฉันใหม่ใน MongoDB และฉันไม่รู้จริงๆ ว่าอะไรคือแนวทางปฏิบัติที่ดีที่สุดในการทำเช่นนั้นอย่างมีประสิทธิภาพ!
ความนับถือ!