替换或跳过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作为示例。实际上还不知道它们会是什么。