Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 更新mongodb中嵌套数组文档中的第n个文档_Arrays_Mongodb_Updates - Fatal编程技术网

Arrays 更新mongodb中嵌套数组文档中的第n个文档

Arrays 更新mongodb中嵌套数组文档中的第n个文档,arrays,mongodb,updates,Arrays,Mongodb,Updates,我需要更新Mongo DB中另一个文档中数组中的文档 { "_id" : ObjectId("51cff693d342704b5047e6d8"), "author" : "test", "body" : "sdfkj dsfhk asdfjad ", "comments" : [ { "author" :

我需要更新Mongo DB中另一个文档中数组中的文档

{ "_id" : ObjectId("51cff693d342704b5047e6d8"), "author" : "test", "body" : "sdfkj dsfhk asdfjad ", "comments" : [ { "author" : "test", "body" : "sdfkjdj\r\nasdjgkfdfj", "email" : "test@tes.com" }, { "author" : "hola", "body" : "sdfl\r\nhola \r\nwork here" } ], "date" : ISODate("2013-06-30T09:12:51.629Z"), "permalink" : "jaiho", "tags" : [ "jaiho" ], "title" : "JAiHo" } Q1) Update email of 0th element of comments array db.posts.update({"permalink" : "haha"},{$set:{"comments.0.email":1}}) This doesn't throw any exception but doesn't update anything as well Q2) Add a field on nth element of comments array number_likes db.posts.update({"permalink" : "haha"},{$inc:{"comments.0.num_likes":1}}) Doesn't work either. Am I missing something here? { “_id”:ObjectId(“51cff693d342704b5047e6d8”), “作者”:“测试”, “正文”:“sdfkj dsfhk asdfjad”, “评论”:[ { “作者”:“测试”, “正文”:“sdfkjdj\r\nasdjkkfdfj”, “电子邮件”:test@tes.com" }, { “作者”:“你好”, “正文”:“sdfl\r\nhola\r\n在此处工作” } ], “日期”:ISODate(“2013-06-30T09:12:51.629Z”), “permalink”:“jaiho”, “标签”:[ “jaiho” ], “标题”:“JAiHo” } Q1)更新注释数组第0个元素的电子邮件 db.posts.update({“permalink”:“haha”},{$set:{“comments.0.email”:1}}) 这不会引发任何异常,但也不会更新任何内容 Q2)在注释数组编号的第n个元素上添加一个字段 update({“permalink”:“haha”},{$inc:{“comments.0.num_likes”:1}}) 也不行。 我是不是遗漏了什么?
问题1:如果你用permalink'jaiho'而不是'haha'更新,它肯定会更新电子邮件

> db.posts.update({"permalink" : "jaiho"},{$set:{"comments.0.email":1}})
> db.posts.find()
    ...,    "email" : 1 },...
问题2:这包括同样的情况

> db.posts.update({"permalink" : "jaiho"},{$inc:{"comments.0.num_likes":1}})
> db.posts.find()
    ..., "num_likes" : 1 },...

如果您试图在NodeJS中动态地执行此操作,那么以下操作应该可以工作

i = 0;
selector = {};
operator = {};
selector['comments.' + i + '.email'] = 1; // {'comments.0.num_likes' : 1}
operator['$inc'] = selector;  // {'$inc' : {'comments.0.num_likes' : 1} }
db.posts.update({'permalink' : 'xyz'}, operator);

哈哈,这几乎可以肯定是来自10gen mongo课程:P是的,事实上,但找不到解决方案出了什么问题,不想通过测试;)你可能会认为这是作弊,但也许我还在学习。不,一切都好。它只是让我笑了。