替换或跳过MongoDB中的部分阵列
假设我有一个包含如下文档的集合:替换或跳过MongoDB中的部分阵列,mongodb,Mongodb,假设我有一个包含如下文档的集合: { "_id": ";lkajsdflhkadfhaewifjasdkfjalksdfjs", "tree": [ { "id": "a", "name": "One" }, { "id": "b", "name": "Two" }, { "id": "c", "name": "Three" }, { "id": "d", "name": "Four" } ] } {
{
"_id": ";lkajsdflhkadfhaewifjasdkfjalksdfjs",
"tree": [
{ "id": "a", "name": "One" },
{ "id": "b", "name": "Two" },
{ "id": "c", "name": "Three" },
{ "id": "d", "name": "Four" }
]
}
{
"_id": ";lkajsdflhkadfhaewifjasdkfjalksdfjs",
"tree": [
{ "id": "e", "name": "Five" },
{ "id": "f", "name": "Six" },
{ "id": "c", "name": "Three" },
{ "id": "d", "name": "Four" }
]
}
现在让我们假设我想用e、f和c条目替换我的树数组中的a、b和c条目。是否可以用更新查询替换该查询?如果没有,是否有方法选择文档,使树
数组仅包含c和d项(或仅包含d项)?我希望我的文档如下所示:
{
"_id": ";lkajsdflhkadfhaewifjasdkfjalksdfjs",
"tree": [
{ "id": "a", "name": "One" },
{ "id": "b", "name": "Two" },
{ "id": "c", "name": "Three" },
{ "id": "d", "name": "Four" }
]
}
{
"_id": ";lkajsdflhkadfhaewifjasdkfjalksdfjs",
"tree": [
{ "id": "e", "name": "Five" },
{ "id": "f", "name": "Six" },
{ "id": "c", "name": "Three" },
{ "id": "d", "name": "Four" }
]
}
树的顺序
数组很重要。我知道$splice
,但我不知道c项的索引。此外,索引可能因文档而异。我可以在$splice
中进行查询以查找索引吗?如何执行find().forEach
db.test.find().forEach(函数(doc){for(var i=0;i
当然,您可以加入更具体的逻辑来适应您的规则,但这将简单地用e替换a条目,用f替换b条目。您的数组通常真的很大吗?大多数数组运算符都设计为使用单个索引(或全部索引)。数组不应该太大,但它在技术上不受限制,所以我不能说它总是很小。最简单的解决方案就是加载整个文档,并使用您的平台/驱动程序保存它。我使用了a、b、c、d、e、f作为示例。实际上还不知道它们会是什么。