/ / Jak zbudować zapytanie rmongodb za pomocą $ i operatora - r, mongodb, rmongodb

Jak skonstruować zapytanie rmongodb za pomocą $ i operator - r, mongodb, rmongodb

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 № 1

Nie 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!