找不到标识符“-1”的数组过滤器
No array filter found for identifier '-1'
我正在使用 C# 驱动程序 2.14 MongoDB 开发 .NET 应用程序。
我的查询如下:
我有一个嵌入式数组元素,例如:
{
"_id" : 1,
"Friends" : [
{
"_id" : 2,
"FirstName" : "Bob",
"LastName":"Marley",
"Gender":"Male",
...
},
{
"_id" : 3,
"Name" : "Jonson",
"LastName":"Charles",
"Gender":"Male",
...
},
{
"_id" : 4,
"Name" : "Bob",
"LastName":"",
"Gender":"Male",
...
}
]
}
其中有多个字段。我需要更新其中一个嵌套文档中的所有值。
我写了一个代码如下:
var filter1 = Builders<BsonDocument>.Filter.Eq("_id", 1);
var filter2 = Builders<BsonDocument>.Filter.ElemMatch<BsonValue>("Friends", new BsonDocument(){ {"_id", 2 }});
var update = Builders<BsonDocument>.Update.Set("Friends.$[-1]", BsonDocument.Parse(JsonConvert.SerializeObject(object)));
await collection.UpdateAsync(filter1&filter2, update);
我得到的异常是:
No array filter found for identifier '-1'
任何人都可以建议这是否是正确的方法吗?
对于
,MongoDB中的syntax/statement无效
"Friends.$[-1]"
您需要 arrayFilter 来更新嵌套数组字段中的文档。
using MongoDB.Bson;
var filter1 = Builders<BsonDocument>.Filter.Eq("_id", 1);
var filter2 = Builders<BsonDocument>.Filter.ElemMatch<BsonValue>("Friends"
, new BsonDocument() { { "_id", 2 } });
// Sample value to be updated
var obj = new
{
_id = 2,
FirstName = "Bobby",
LastName = "Marley",
Gender = "Female"
};
var arrayFilters = new[]
{
new BsonDocumentArrayFilterDefinition<BsonDocument>(
new BsonDocument("friend._id", 2)
)
};
var update = Builders<BsonDocument>.Update.Set("Friends.$[friend]", obj.ToBsonDocument());
await collection.UpdateOneAsync(filter1 & filter2, update,
options: new UpdateOptions { ArrayFilters = arrayFilters });
注:
此语句用于将object
转换为BsonDocument
。
BsonDocument.Parse(JsonConvert.SerializeObject(object))
可以替换为
obj.ToBsonDocument()
Output
我正在使用 C# 驱动程序 2.14 MongoDB 开发 .NET 应用程序。 我的查询如下:
我有一个嵌入式数组元素,例如:
{
"_id" : 1,
"Friends" : [
{
"_id" : 2,
"FirstName" : "Bob",
"LastName":"Marley",
"Gender":"Male",
...
},
{
"_id" : 3,
"Name" : "Jonson",
"LastName":"Charles",
"Gender":"Male",
...
},
{
"_id" : 4,
"Name" : "Bob",
"LastName":"",
"Gender":"Male",
...
}
]
}
其中有多个字段。我需要更新其中一个嵌套文档中的所有值。
我写了一个代码如下:
var filter1 = Builders<BsonDocument>.Filter.Eq("_id", 1);
var filter2 = Builders<BsonDocument>.Filter.ElemMatch<BsonValue>("Friends", new BsonDocument(){ {"_id", 2 }});
var update = Builders<BsonDocument>.Update.Set("Friends.$[-1]", BsonDocument.Parse(JsonConvert.SerializeObject(object)));
await collection.UpdateAsync(filter1&filter2, update);
我得到的异常是:
No array filter found for identifier '-1'
任何人都可以建议这是否是正确的方法吗?
对于
,MongoDB中的syntax/statement无效"Friends.$[-1]"
您需要 arrayFilter 来更新嵌套数组字段中的文档。
using MongoDB.Bson;
var filter1 = Builders<BsonDocument>.Filter.Eq("_id", 1);
var filter2 = Builders<BsonDocument>.Filter.ElemMatch<BsonValue>("Friends"
, new BsonDocument() { { "_id", 2 } });
// Sample value to be updated
var obj = new
{
_id = 2,
FirstName = "Bobby",
LastName = "Marley",
Gender = "Female"
};
var arrayFilters = new[]
{
new BsonDocumentArrayFilterDefinition<BsonDocument>(
new BsonDocument("friend._id", 2)
)
};
var update = Builders<BsonDocument>.Update.Set("Friends.$[friend]", obj.ToBsonDocument());
await collection.UpdateOneAsync(filter1 & filter2, update,
options: new UpdateOptions { ArrayFilters = arrayFilters });
注:
此语句用于将object
转换为BsonDocument
。
BsonDocument.Parse(JsonConvert.SerializeObject(object))
可以替换为
obj.ToBsonDocument()
Output