正在尝试 update() 集合中的特定单个数组,但是虽然它可以在单个特定数组上与 $push 参数一起正常工作,但它不适用于 $set 参数。
不太明白这背后的逻辑,因为当我使用这样一个 $push 元素的例子时:
$post_comment = array('$push' =>
array("comments" => array(
"_id" => new MongoId(),
"comment" => htmlspecialchars($_POST['comment']),
"author" => $user->username,
"date" => new MongoDate()
)
)
);
$entries->update(array(
"_id" => $_GET["id"]), $post_comment);
它给了我一个 MongoDB 数据库中的数组,看起来或多或少像这样(分别推入四个项目):
{
"_id" : "css-clearfix-explained",
"comments" : [
{
"_id" : ObjectId("540cc940af105b19133c9869"),
"comment" : "aaa",
"author" : "maciejsitko",
"date" : ISODate("2014-09-07T21:08:16.215Z")
},
{
"_id" : ObjectId("540cc943af105b19133c986a"),
"comment" : "bbb",
"author" : "maciejsitko",
"date" : ISODate("2014-09-07T21:08:19.542Z")
},
{
"_id" : ObjectId("540cc946af105b19133c986b"),
"comment" : "ccc",
"author" : "maciejsitko",
"date" : ISODate("2014-09-07T21:08:22.968Z")
}
]
}
这基本上是我想要的,并且根据文档在逻辑上可以正常工作。但是当我尝试使用 $set 来编辑单个评论时,以类似的方式显示:
$edit_comment = array('$set' =>
array("comments" => array(
"_id" => new MongoId($_POST['cmt-id']),
"comment" => htmlspecialchars($_POST['edit-comment']),
"author" => $user->username,
"date" => new MongoDate()
)
)
);
$entries->update(array(
"_id" => $_GET["id"]), $edit_comment);
它输出四个不同的数组来代替前面的数组,为了说明这一点,我将展示当我将第一条评论“aaa”更新为“ddd”时发生的情况:
{
"_id" : "css-clearfix-explained",
"comments" : {
"_id" : ObjectId("540cc940af105b19133c9869"),
"comment" : "ddd\r\n ",
"author" : "maciejsitko",
"date" : ISODate("2014-09-07T21:12:10.833Z")
}
}
所有四个数组元素几乎都被删除了,取而代之的是四个字段作为四个独立的数组元素。
怎么会?它不应该像上面的 $push 示例一样正常工作吗?
解决方案:
没有在comments中指定索引,因此,$set 用提供的关联数组替换了数组comments。如果要更新评论更改第一个参数中的查询以通过唯一字段匹配评论。
例如,日期。在第二个参数中使用位置 $ 运算符。例:
$edit_comment = array('$set' =>
array("comments.$" => array(
"_id" => new MongoId($_POST['cmt-id']),
"comment" => htmlspecialchars($_POST['edit-comment']),
"author" => $user->username,
"date" => new MongoDate()
)
)
);
// this assumes the post date is unique. On second though use something else.
$query = array( "_id" => $_GET["id"], "comments.date" => $_POST['post-date'])
$entries->update( $query, $edit_comment);
- 版权声明:本文基于《知识共享署名-相同方式共享 3.0 中国大陆许可协议》发布,转载请遵循本协议
- 文章链接:https://www.imiowo.com/914.html [复制] (转载时请注明本文出处及文章链接)
相关文章
又是元气MAX的一天(●'◡'●)
作者:秫米介绍:来一起坐下喝杯奶茶!
文章:77篇
最后更新:23-11-01
介绍:来一起坐下喝杯奶茶!
文章:77篇
当前页面评论被关闭,原因如下:
发表评论