Я пытаюсь подражать следующий MongoDB шеллкода:
db.products.find({ $or : [ { title : /blue/i }, { tags : /blue/i } ] }, {_id:0, title:1});
Это то, что я пробовал:
bson query[1];
mongo_cursor cursor[1];
bson_init(query);
{
bson_append_start_object(query, "$or");
bson_append_regex(query, "title", "blue", "i");
bson_append_regex(query, "tags", "blue", "i");
bson_append_finish_object(query);
}
bson_finish(query);
mongo_cursor_init(cursor, conn, "test.products");
mongo_cursor_set_query(cursor, query);
while(mongo_cursor_next(cursor) == MONGO_OK) {
bson_iterator iterator[1];
if (bson_find(iterator, mongo_cursor_bson(cursor), "title")) {
printf("%s\n", bson_iterator_string(iterator));
}
}
bson_destroy(query);
mongo_cursor_destroy(cursor);
Но это, кажется, не работайте, как ожидалось. Я также попытался заменить объект массивом, а затем вложил массив в объект, но безрезультатно.
$ или нужен массив объектов. Не могли бы вы изменить свой вопрос, чтобы показать, как вы пытались использовать массив объектов? Помните, что существует 3 уровня: запрос верхнего уровня, поле массива $ или или вложенный объект для каждого предложения внутри массива. Также, пожалуйста, опубликуйте вывод bson_print() в своем запросе, чтобы упростить отладку. – mstearn