|
Hello boniface,
currently, we don't support comparison for operations where both operands are not constant in `Linq` expressions or builders.
But you can reach the same target if you use `BsonDocumentFilterDefinition` together with the `$expr` operator. See my repro below:
public class Measurement
|
{
|
public ObjectId Id { get; set; }
|
public DateTime RcvTime { get; set; }
|
public DateTime ObsTime { get; set; }
|
public string Value { get; set; }
|
}
|
|
[Fact]
|
public void POC()
|
{
|
var coll = database.GetCollection<Measurement>("Measurement");
|
var now = DateTime.Now;
|
coll.InsertOne(new Measurement() { ObsTime = now, RcvTime = now, Value = "Will be matched" });
|
coll.InsertOne(new Measurement() { ObsTime = now, RcvTime = DateTime.Now.AddHours(1), Value = "Won't be matched" });
|
|
FilterDefinition<Measurement> filter = new BsonDocumentFilterDefinition<Measurement>(
|
new BsonDocument(
|
"$expr", new BsonDocument(
|
"$eq", new BsonArray
|
{
|
"$ObsTime", "$RcvTime"
|
})));
|
var result = coll.FindSync(filter).ToList();
|
// result will contain only the "Will be matched" record
|
}
|
NOTE: the $expr operator is supported for the server versions higher or equal to `3.6`. See the doc: https://docs.mongodb.com/manual/reference/operator/query/expr/#examples
|