Antingen c() eller list() kan vara ok. Beror på om komponenterna är namngivna och om de alla har samma typ (för lista). Det bästa du kan göra är att titta på den genererade BSON och se om du får det du vill ha. För bästa kontroll över det genererade objektet använd mongo.bson.buffer och de funktioner som fungerar på det. Det är faktiskt därför underfrågorna misslyckas. "kommentarer" skapas som ett underobjekt snarare än en array. mongo.bson.from.list() är praktiskt men det ger dig inte samma kontroll och ibland gissar det fel om vad som ska genereras från komplicerade strukturer.
Frågan på den andra datauppsättningen kan korrigeras så här:
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)
Observera att du definitivt behöver använda en buffert här eftersom R kommer att strypa på det prickade namnet.
Jag hoppas att detta löser ditt problem. Meddela mig om du har ytterligare frågor.