我有一个属性类:
class
{
string Key;
string Value;
}
我有一个像这样的对象:
{
....
List<Property> Properties
}
如果我想添加一个属性,我可以这样做:
Filter: _ => _.id == MyId && _.Properties.Any(__ => __.Key == MyKey)
Update: AddToSet(_ => _.Properties, new Property { Key = MyKey, Value = MyValue })
如果我想编辑现有属性,我可以这样做:
Filter: _ => _.id == MyId && _.Properties.Any(__ => __.Key == MyKey)
Update: Set(_ => _.Properties[-1].Value, MyValue)
这很有效。 (作为第二个问题:在创建或替换属性的情况下,我可以做一些upsert吗?)
问题来自获取数据:
Query: _ => _._id == MyId && _.Properties.Any(__ => __.Key == MyKey))
这将返回对象如果它有正确的键,但投影将失败:
Query: _ => _._id == MyId && _.Properties.Any(__ => __.Key == MyKey))
Projection: Expression(_ => _.Properties[-1].Value)
这将返回null .. [ - 1] 不能使用投影吗?
我可以这样工作:
Projection: Expression(_ => _.Properties.First(__ => __.Key == Name).Value)
但这并不能解释为什么[-1]不起作用。