Chcę użyć rmongodb, aby uzyskać dostęp do bazy danych MongoDB w R. Próbowałem zbudować następujące zapytanie:
{"$and": [{_id: {"$gte": "2013-01-01"}}, {_id: {"$lte": "2013-01-10"}}]}
Próbowałem trzech różnych metod, aby stworzyć obiekt Bson, nie mając szczęścia dla wszystkich.
Metoda 1:
buf = mongo.bson.buffer.create()
mongo.bson.buffer.start.array(buf, "$and")
mongo.bson.buffer.append(buf, "_id", list("$gte"="2013-01-01"))
mongo.bson.buffer.append(buf, "_id", list("$lte"="2013-01-10"))
mongo.bson.buffer.finish.object(buf)
bson = mongo.bson.from.buffer(buf)
Metoda 2:
buf = mongo.bson.buffer.create()
mongo.bson.buffer.start.array(buf, "$and")
mongo.bson.buffer.start.object(buf, "_id")
mongo.bson.buffer.append(buf, "$gte", "2013-01-01")
mongo.bson.buffer.finish.object(buf)
mongo.bson.buffer.start.object(buf, "_id")
mongo.bson.buffer.append(buf, "$lte", "2013-01-10")
mongo.bson.buffer.finish.object(buf)
mongo.bson.buffer.finish.object(buf)
bson = mongo.bson.from.buffer(buf)
Metoda 3:
mongo.bson.from.list(list("$and"=list("_id" = list("$lte"="2013-01-10"), "_id" = list("$gte"="2013-01-01"))))
Żadne z nich nie działa. Wszystkie zwracają pusty wynik.
Kiedyś szukałem, jedynym podobnym pytaniem jest rmongodb: za pomocą $ lub w zapytaniu Rozwiązaniem było użycie RMongo zamiast tego, co nie jest dostępne dla R 2.50.
Utknąłem w tym problemie przez kilka dni. jeśli nie mogę znaleźć rozwiązania, musiałbym napisać zewnętrzny skrypt z pythonem i wywołać go z R.
Odpowiedzi:
0 dla odpowiedzi № 1Nie znam R, ale tak naprawdę nie trzeba go używać $and
dla tego zapytania. Jest to nieco prostsze i powinno być łatwiejsze do przetłumaczenia na R:
{_id: {"$gte": "2013-01-01", "$lte": "2013-01-10"}}
0 dla odpowiedzi nr 2
twój sposób tworzenia mongo bsonowej tablicy jest zły. Brakuje części
mongo.bson.buffer.start.object(buf, "0")
...
mongo.bson.buffer.finish.object(buf)
mongo.bson.buffer.start.object(buf, "1")
...
mongo.bson.buffer.finish.object(buf)
Dla działającego przykładu sprawdź najnowszy komentarz na temat: https://github.com/mongosoup/rmongodb/issues/17
Mam nadzieję, że na razie to działa. Pracuję nad łatwiejszym rozwiązaniem!