我正在try 用Golang语言(下面我附上了纯MongoDB查询的工作代码)使用go.mongodb.org/mongo-driver/mongo
库进行查询,下面是Golang查询代码.我无法让matchStage
正常工作,我已经try 了许多变种,我肯定我只是非常粗心或只是不理解
我怎样才能同时用$match
、$expr
、$and
和$lte
算出正确的matchStage
呢?
func (r *Mongo) ChatHistory(ctx context.Context, chatID string, f *Filter) ([]*Message, error) {
matchStage := bson.D{
primitive.E{
Key: "$match",
Value: bson.D{
primitive.E{Key: "$expr", Value: bson.D{
primitive.E{Key: "$and", Value: bson.A{
bson.D{
primitive.E{Key: "$lte", Value: bson.D{
primitive.E{
Key: "$create_date",
Value: f.Date, // int64
},
}},
},
}},
}},
},
},
}
sortStage := bson.D{
{
Key: "$sort", Value: bson.D{
primitive.E{Key: "create_date", Value: -1},
},
},
}
limitStage := bson.D{primitive.E{Key: "$limit", Value: f.Count}}
cursor, err := r.colMessage.Aggregate(ctx, mongo.Pipeline{matchStage, sortStage, limitStage})
if err != nil {
l.Error().Err(err).Msg("failed find")
return nil, err
}
var res []*Message
if err = cursor.All(ctx, &res); err != nil {
l.Error().Err(err).Msg("failed find all documents")
return nil, err
}
if err = cursor.Close(ctx); err != nil {
l.Error().Err(err).Msg("failed close cursor")
return nil, err
}
return res, nil
}
Error:(InvalidPipelineOperator) Unrecognized expression '$create_date'