我正在创建一个博客网站,所以我使用MongoDB作为我的数据库。在我的收藏“文章”中,我有1个名为帖子的嵌入式文档,我想再插入1个嵌入式文档。评论。
DB:
{
"_id": ObjectId("4f41a5c7c32810e404000000"),
"username":"abc",
"posts": [
{
"_id": 1,
"content": "dskcnkdcnksldcnskcd",
"title" : "test1"
},
{"_id": 2,
"content": "dskcsdsl;d,cl;sdcl;sdmcnkdcnksldcnskcd",
"title" : "test2"
},
]
}
我想在帖子中插入评论。
{
"_id": ObjectId("4f41a5c7c32810e404000000"),
"username":"abc",
"posts": [
{
"_id": 1,
"content": "dskcnkdcnksldcnskcd",
"title" : "test1",
"comments":[
{
"content": "usdhcjsdcjskd",
"by" : "abc"
}
]
},
{"_id": 2,
"content": "dskcsdsl;d,cl;sdcl;sdmcnkdcnksldcnskcd",
"title" : "test2"
}
]
}
答案 0 :(得分:3)
评论实际上是文档中帖子的嵌入式文档,因此您需要稍微更改一下查询:
$collection->update(array('_id' => new MongoId($bid),'posts.id'=> $pid),array('$push' => array('posts.$.comments' => $comment)));
试试。
注意我是如何使用位置运算符的?您可以在此处详细了解:http://www.mongodb.org/display/DOCS/Updating/#Updating-The%24positionaloperator
答案 1 :(得分:0)
您需要注意的是第一次插入的结构。例如,你有一些用户有一些列表,你想让他最多有5个列表。这就是你用PHP做的方法:
如果您的本地主机服务器上的PHP环境中没有mongodb扩展,则需要安装它;
您需要安装mongodb并运行它。
完成所有这些后,您可以轻松地执行此操作:
$m = new Mongo("mongodb://localhost");
$db = $m->statistic->list;
// statistic is my database and list are collection.
$list =
array(
'_id' => 18,
'lists' =>
array(
array(
'name' => 'Magento and PHP developer',
'recipients' =>
array(
'name' => 'Kristijan Glibo',
'email' => 'glibo.kristijan@gmail.com'
),
'count' => 12345),
));
你可以在这里看到我使用了一些(int)18作为我的_id。如果你没有指定它,Mongo将生成它。我这样使用它只是为了测试目的。请注意,列表 数组,其中的每个列表也都是数组,并且拥有自己的数据!我的列表 Magento和PHP开发人员包含有关收件人和计数的数据。收件人也有一些独特的数据。
让我们首先插入我们的Mongodb:
$document = $db->insert($list);
如果我们现在转储集合以查看我们在其中保存的内容,我们将得到这个:
注意:要获取您的收藏及其中的所有内容,您可以使用以下代码:
$documents = $db->find();
echo '<pre>';
foreach ($documents as $doc) {
var_dump($doc);
}die();
********************这是转储数据******************* < /强>
["_id"]=>
int(18)
["lists"]=>
array(3) {
[0]=>
array(3) {
["name"]=>
string(10) "Magento and PHP developer"
["recipients"]=>
array(2) {
["name"]=>
string(4) "Kristijan Glibo"
["email"]=>
string(25) "glibo.kristijan@gmail.com"
}
["count"]=>
int(12345)
}
现在让我们更新用户并为他添加更多列表:
$updatelist = array('name' => 'updatelist', 'recipients' => array(),'count'=>2876);
$documentupdate = $db->
update(
array('_id'=>18),
array('$addToSet' => array('lists'=> $updatelist)));
你告诉他哪个对象要通过selectin _id =&gt;进行更新18以及如何更新。我测试了它,如果该列表不存在,它将添加新列表。如果存在,它将跳过它。
希望这有帮助!