Sia c() che list() possono andare bene. Dipende dal nome dei componenti e dal fatto che abbiano tutti lo stesso tipo (per l'elenco). La cosa migliore da fare è guardare il BSON generato e vedere se stai ottenendo quello che vuoi. Per il miglior controllo dell'oggetto generato utilizzare mongo.bson.buffer e le funzioni che operano su di esso. In effetti, questo è il motivo per cui le sottoquery non riescono. 'commenti' viene creato come sottooggetto anziché come matrice. mongo.bson.from.list() è utile ma non ti dà lo stesso controllo e talvolta indovina cosa generare da strutture complicate.
La query sull'altro set di dati può essere corretta in questo modo:
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.start.object(buf, "name.first")
mongo.bson.buffer.append(buf, "$in", c("Alex", "Horst"))
mongo.bson.buffer.finish.object(buf)
criteria <- mongo.bson.from.buffer(buf)
Nota che devi assolutamente usare un buffer qui poiché R si strozzerà sul nome puntato.
Spero che questo risolva il tuo problema. Fammi sapere se hai altre domande.