我在MongoDB中名为document
的集合中有以下Users
。我正在尝试将<SpecificBeer>
插入beersInCellar[]
mycellar
的{{1}}。我在cellar
和filter
对象中尝试了各种组合,但是无法将我的头部插入到嵌套数组中。我知道如何update
find
并将内容插入其中,而不是插入该文档中的数组中。
document
SpecificBeer模型:
{
"_id" : ObjectId("5920751b6d4f6a27cf7985a8"),
"name" : "FullName",
"emailAddress" : "emailaddress@example.com",
"cellars" : [
{
"cellarId" : "mycellar",
"cellarName" : "My Cellar",
"beersInCellar" : [ ]
}
]
}
插入方法
public class SpecificBeer
{
public string ourid
{
get
{
return ID.ToString();
}
set
{
ID = ObjectId.Parse(value);
}
}
[BsonId]
private ObjectId ID {get; set;}
public string year { get; set; }
public string variant { get; set; }
public string quantity { get; set; }
public string numberForTrade { get; set; }
}
答案 0 :(得分:2)
您必须使用$positional运算符。
您必须在{mongoDB的cellarId
中包含字段(cellars
)以找到元素的索引,并使用查询部分中找到的索引替换占位符($
)在更新部分中推送beersInCellar
中的元素。
像
这样的东西 var filter = Builders<User>.Filter.Eq(e => e.name, "FullName") & Builders<User>.Filter.ElemMatch(e => e.cellars, Builders<Cellar>.Filter.Eq(e => e.cellarId, "mycellar"));
var update = Builders<User>.Update.Push(e => e.cellars[-1].beersInCellar, specificBeer);
Shell查询供参考:
db.collection.update({"name" : "FullName", "cellars":{$elemMatch:{"cellarId":"mycellar"}}},{$push:{"cellars.$.beersInCellar":{"quantity":1, "year":1986}}})
MongoDB在数组内的嵌套数组中没有更新字段(例如quantity
)的一流支持。
您可以跟踪允许多级更新的jira。
https://jira.mongodb.org/browse/SERVER-27089
您现在可能想要重新访问您的结构。尝试将beersInCellar
数组提升到最高级别。