JVG*_*JVG 7 database arrays mongodb nosql
我有一个内部有数组的文档,如下所示:
"userTags" : [
"foo",
"foo",
"foo",
"foo",
"moo",
"bar"
]
Run Code Online (Sandbox Code Playgroud)
如果我执行,db.products.update({criteriaToGetDocument}, {$push: {userTags: "foo"}}}我可以正确插入foo数组的另一个实例.
但是,如果我这样做,db.products.update({criteriaToGetDocument}, {$pull: {userTags: "foo"}}}它会从数组中删除所有实例foo,让我:
"userTags" : [
"moo",
"bar"
]
Run Code Online (Sandbox Code Playgroud)
这根本不会做,我只想从数组中拉出一个项而不是全部.如何更改命令以便只foo删除一个命令?有什么$pullOnce方法可以在这里工作吗?
不,目前还没有这样的事情。很多人已经请求了该功能,您可以在mongodb Jira中跟踪它。据您所见,它尚未解决,也未安排(这意味着您在不久的将来没有运气)。
唯一的选择是使用应用程序逻辑来实现这一点:
请记住,此操作会破坏原子性,但由于 Mongo 没有提供执行此操作的本机方法,因此您将以任何方式破坏原子性。
我将一种替代解决方案移至新答案,因为它没有回答这个问题,但代表了重构现有模式的方法之一。它也变得如此之大,开始比原来的答案大得多。