我有像下面的mongo集合
{
"auther" : "xyz" ,
"location" : "zzz" ,
"books" :
[
{"book1" : "b1" , "date" : 2-3-00} ,
{"book1" : "b2" , "date" : 4-9-00}
]
}
{
"auther" : "pqr",
"location" : "zzz" ,
"books" :
[
{"book1" : "b1" , "date" : 2-4-00}
]
}
Run Code Online (Sandbox Code Playgroud)
我想得到书b1和作者xyz的唯一日期.
我有如下查询
db.coll.find({"auther" : "xyz" , "books.book1" : "b1"} , {"books.date" : 1})
Run Code Online (Sandbox Code Playgroud)
但它的输出如下
"books" : {"date" : 2-4-00} , "books" : {"date" : 4-9-00}
Run Code Online (Sandbox Code Playgroud)
我想只得到书b1和其他xyz .means的日期 "books" : {"date" : 2-4-00}
有可能在mongo或我做错了什么?
它可以使用map/reduce完成,只需将子元素发送到临时内联集合中.它是一种哈克和它的作品,但是我会反对建议作为地图/减少是单线程的,并已经为你想达到什么大的开销,这是很容易,只需提取子元素在您的应用程序.
像这样......
地图:
m = function() {
this.books.forEach(function(book){
if(book1 == 'b1'){
emit("books", {date: book.date,});
}
});
}
Run Code Online (Sandbox Code Playgroud)
降低:
r = function(key, values) {
return this;
}
Run Code Online (Sandbox Code Playgroud)
查询:
db.coll.mapReduce(m, r, {query : {"auther" : "xyz" , "books.book1" : "b1"}, out: { inline : 1}})
| 归档时间: |
|
| 查看次数: |
87460 次 |
| 最近记录: |