gpt4 book ai didi

mongodb - 为什么 $pull 运算符在使用空条件时在 MongoDB 上不起作用?

转载 作者:可可西里 更新时间:2023-11-01 10:07:36 24 4
gpt4 key购买 nike

我有这样的节点:

[_id] => MongoId Object (
[$id] => 4e90cb3cd68417740c000017
)
[label] => mystery
[owner] => me
[parents] => Array (
[0] => Array (
[id] => MongoId Object (
[$id] => 4e8c6bb6d68417340e0004ca
)
[owner] => userid
[timestamp] => 1318112522
)
)
[timestamp] => 1318112060
[translabel] => mystery
[type] => 0

我想做的是删除 ID 为 4e8c6bb6d68417340e0004ca 的 parent ,无论他们在哪里。

例如这应该是有效的(最新的 Mongo):

db.nodes.update({},{$pull : {"parents": { "id" : ObjectId("4e8c6bb6d68417340e0004ca") }}});

或 PHP 中的 equaly(最新的驱动程序等):

$mongodb->nodes->update(array(),array('$pull'=> array('parents'=>array('id'=> new MongoId("4e8c6bb6d68417340e0004ca")))));

两者什么都不做!


另一方面:

db.nodes.update({"_id": ObjectId("4e90cb3cd68417740c000017")},{$pull : {"parents": { "id" : ObjectId("4e8c6bb6d68417340e0004ca") }}});

或者在 PHP 中是等价的:

$mongodb->nodes->update(array('_id' => new MongoId("4e90cb3cd68417740c000017"),array('$pull'=> array('parents'=>array('id'=> new MongoId("4e8c6bb6d68417340e0004ca")))));

工作得很好!这是一个错误吗?我在子文档中对 MongoID 对象使用“id”而不是“_id”是否有问题?在此先感谢您的帮助!

最佳答案

你试过启用multi flag吗?关于更新命令

db.collection.update( criteria, objNew, upsert, multi )

multi - 指示是否应更新所有符合条件的文档而不是一个。可以与下面的 $ 运算符一起使用。

并将您的查询更改为

db.nodes.update({},{$pull : {"parents": { "id" : ObjectId("4e8c6bb6d68417340e0004ca") }}},false,true);

db.nodes.update({ "_id" : { $exists : true } },{$pull : {"parents": { "id" : ObjectId("4e8c6bb6d68417340e0004ca") }}},false,true);

我自己没有测试过代码,但我确信上面的任何一个都可以工作..

关于mongodb - 为什么 $pull 运算符在使用空条件时在 MongoDB 上不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7702212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com