mongodb update 空 object ({}) 保存为 array ([])

2022-04-28 10:36:20 +08:00
 HardStone

doc1:

{
   "a": {}
}

查询出来之后添油加醋保存为另外一个 doc, 就变成了

doc2:

{
    "a": []
}

请问有大佬解答一下如何处理吗...

2419 次点击
所在节点    PHP
15 条回复
rust
2022-04-28 10:44:31 +08:00
请把你"添油加醋"的代码发出来
HardStone
2022-04-28 10:47:34 +08:00
@rust #1 不是啊, "添油加醋"只是业务需求, 没有改动到这个字段
HardStone
2022-04-28 10:48:10 +08:00
@HardStone #2 也许我就不应该添油加醋地把"添油加醋"加进去
HardStone
2022-04-28 10:49:48 +08:00
就是 {} 查询出来是 [], 然后保存的时候要如何保存为原来的 {}, 搜了一些都是答非所问
HardStone
2022-04-28 10:51:07 +08:00
lambdaq
2022-04-28 10:51:39 +08:00
看到标题,心里想,这怕不是用了 php

点进来一看,果然,分区是 php
chendy
2022-04-28 10:52:15 +08:00
1. 看下 mongo 的库有没有相关配置,不把空对象读取成空数组的(类似 json_decode(json, true)
2. 保存之前自己做判断,如果是空数组,转换成 (object) 存回去
HardStone
2022-04-28 10:53:28 +08:00
@lambdaq #6 哈哈哈哈
HardStone
2022-04-28 10:54:43 +08:00
@chendy #7 我也想到了, 但是想想, 也许可以避免存空数组 /空对象这种容易产生歧义的, 直接存 null 就不会有这个问题 /这么多额外步骤
fuchish112
2022-04-28 13:47:28 +08:00
暂时想到的是 new \stdClass()解决
fkdtz
2022-04-28 14:56:26 +08:00
这让我想起那天一个帖子,吐槽 json 格式复杂,一会用 [] ,一会用 {} ,还是 PHP 简洁,全都是 [] ... 逃
sujin190
2022-04-28 15:53:51 +08:00
似乎只能 new \stdClass()了,毕竟 php 想要强行区分空数组还是空字典似乎只能这样,其实吧你要是只是 php 读写似乎这样存问题也不大,就怕你还有换个语言读写的需求那真是坑人
abigeater
2022-04-28 17:51:14 +08:00
踩过这个坑,我的选择是这个字段干脆就不传了。。。 既然没数据存起来也没啥用。
timonwong
2022-04-28 18:05:36 +08:00
@lambdaq #6 我第一反应是 lua 🙈
limingxinleo
2022-04-30 14:46:21 +08:00
var_dump

json_decode(json_encode(new stdClass), true)

你就知道为什么了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/849736

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX