Ваш запрос переводится на:
{"$or":[
{"stories_involved":{
"_id": ObjectId("5cb4dd7e29d3dca573a73d4c")}},
{"stories_created":{
"_id":ObjectId("5cb4dd7e29d3dca573a73d4c")}}
]}
Это означает, что он ищет любой документ с вложенным документом
то есть:
{stories_involved: {_id: <value>}}
ИЛИ {stories_created: {_id: <value>}}
.
Однако документы в коллекции содержат вложенный массив документов т.е.:
{stories_involved: [{_id:<value>}]}
ИЛИ {stories_created: [{_id:<value>}]}
По этой причине ваш запрос не возвращает никакого значения (и не содержит ошибок, поскольку синтаксис запроса правильный).
Существует два способа Запрос документа, вложенного в массив с использованием точечной нотации . Если вам известен индекс массива для документа, вы можете просто указать позицию:
id, _ := primitive.ObjectIDFromHex("5cb4dd7e29d3dca573a73d4c")
involvedFilter := bson.M{"stories_involved.0._id": id}
createdFilter := bson.M{"stories_created.0._id": id}
filter := bson.M{"$or": []bson.M{involvedFilter, createdFilter}}
cur, err := collection.Find(ctx, filter)
Если вам неизвестна позиция индекса документа, вложенного в массив, объедините имя поля массива с точкой (.) И именем поля во вложенном документе:
id, _ := primitive.ObjectIDFromHex("5cb4dd7e29d3dca573a73d4c")
involvedFilter := bson.M{"stories_involved._id": id}
createdFilter := bson.M{"stories_created._id": id}
filter := bson.M{"$or": []bson.M{involvedFilter, createdFilter}}
cur, err := collection.Find(ctx, filter)
См. Также MongoDB: документы запроса