我正在构建将在意大利使用的mongodb和nodejs中的应用程序.意大利时区是+02:00.这意味着如果任何人在7月11日凌晨01点保存一些数据,那么它将被保存为7月10日晚上11点,因为mongo以UTC格式保存日期.我们需要显示日期明智的tx计数.所以我按日期查询了.但它显示前一天的tx.这应该是什么解决方法.
> db.txs.insert({txid:"1",date : new Date("2015-07-11T01:00:00+02:00")})
> db.txs.insert({txid:"2",date : new Date("2015-07-11T05:00:00+02:00")})
> db.txs.insert({txid:"3",date : new Date("2015-07-10T21:00:00+02:00")})
> db.txs.find().pretty()
{
"_id" : ObjectId("55a0a55499c6740f3dfe14e4"),
"txid" : "1",
"date" : ISODate("2015-07-10T23:00:00Z")
}
{
"_id" : ObjectId("55a0a55599c6740f3dfe14e5"),
"txid" : "2",
"date" : ISODate("2015-07-11T03:00:00Z")
}
{
"_id" : ObjectId("55a0a55699c6740f3dfe14e6"),
"txid" : "3",
"date" : ISODate("2015-07-10T19:00:00Z")
}
> db.txs.aggregate([
{ $group:{
_id: {
day:{$dayOfMonth:"$date"},
month:{$month:"$date"},
year:{$year:"$date"}
},
count:{$sum:1}
}}
])
{ "_id" : { "day" : 11, "month" : 7, "year" : 2015 }, "count" : …Run Code Online (Sandbox Code Playgroud) datetime mongodb node.js mongodb-query aggregation-framework
如何在mongoDB中对每个组进行排序和限制.
考虑以下数据:
Country:USA,name:xyz,rating:10,id:x
Country:USA,name:xyz,rating:10,id:y
Country:USA,name:xyz,rating:10,id:z
Country:USA,name:abc,rating:5,id:x
Country:India,name:xyz,rating:5,id:x
Country:India,name:xyz,rating:5,id:y
Country:India,name:abc,rating:10,id:z
Country:India,name:abc,rating:10,id:x
Run Code Online (Sandbox Code Playgroud)
现在说我将按国家分组并按评级排序,并将每组的数据限制为2.
所以答案是:
Country:USA
name:xyz,rating:10,id:x
name:xyz,rating:10,id:y
Country:India
name:abc,rating:10,id:x
name:abc,rating:10,id:z
Run Code Online (Sandbox Code Playgroud)
我想只使用聚合框架来实现这一点.
我尝试将汇总排序用于评级,但只是查询在处理后没有结果.
假设我用 指定一个 MongoDB 游标pymongo,它不包括结果集中的所有字段,如下所示:
from pymongo import MongoClient
conn = MongoClient('mongodb://localhost:27017')
cur = conn['my_db']['my_collection'].find({},{'_id' : 0, 'my_unwanted_field' : 0})
Run Code Online (Sandbox Code Playgroud)
是否有一个函数或属性可以返回cur.
在 Mongo Shell 上使用的等效内容findOne是:
> var cur = findOne({},{'_id' : 0, 'my_unwanted_field' : 0})
> Object.keys(cur)
["field_1", ... , "field_n"]
Run Code Online (Sandbox Code Playgroud) 我有这个查询,但我得到一个语法错误:意外的标识符
mongoexport --db ium --collection events \
--query 'db.events.find({'created_at' : {
$gte: ISODate("2016-03-01T00:00:00.001Z"),
$lte: ISODate("2016-03-29T23:59:59:59.000Z")
},
"name" : "UPDATE_SUCCESS"})' \
--out guille1_test.json
Run Code Online (Sandbox Code Playgroud)
这有什么不对?
我有两个Schema定义如下:
var WorksnapsTimeEntry = BaseSchema.extend({
student: {
type: Schema.ObjectId,
ref: 'Student'
},
timeEntries: {
type: Object
}
});
var StudentSchema = BaseSchema.extend({
firstName: {
type: String,
trim: true,
default: ''
// validate: [validateLocalStrategyProperty, 'Please fill in your first name']
},
lastName: {
type: String,
trim: true,
default: ''
// validate: [validateLocalStrategyProperty, 'Please fill in your last name']
},
displayName: {
type: String,
trim: true
},
municipality: {
type: String
}
});
Run Code Online (Sandbox Code Playgroud)
我想循环通过每个学生并显示它的时间条目.到目前为止,我有这个代码,显然不对,因为我还不知道如何加入WorksnapTimeEntry模式表.
Student.find({ status: 'student' })
.populate('student')
.exec(function (err, students) …Run Code Online (Sandbox Code Playgroud) 是否可以使用MongoDB聚合框架生成时间序列输出,其中任何被认为属于每个存储桶的源文档都被添加到该存储桶中?
说我的收藏看起来像这样:
/*light_1 on from 10AM to 1PM*/
{
"_id" : "light_1",
"on" : ISODate("2015-01-01T10:00:00Z"),
"off" : ISODate("2015-01-01T13:00:00Z"),
},
/*light_2 on from 11AM to 7PM*/
{
"_id" : "light_2",
"on" : ISODate("2015-01-01T11:00:00Z"),
"off" : ISODate("2015-01-01T19:00:00Z")
}
Run Code Online (Sandbox Code Playgroud)
..我正在使用6小时的桶间隔来生成2015-01-01的报告.我希望我的结果看起来像:
{
"start" : ISODate("2015-01-01T00:00:00Z"),
"end" : ISODate("2015-01-01T06:00:00Z"),
"lights" : []
},
{
"start" : ISODate("2015-01-01T06:00:00Z"),
"end" : ISODate("2015-01-01T12:00:00Z"),
"lights_on" : ["light_1", "light_2"]
},
{
"start" : ISODate("2015-01-01T12:00:00Z"),
"end" : ISODate("2015-01-01T18:00:00Z"),
"lights_on" : ["light_1", "light_2"]
},
{
"start" : ISODate("2015-01-01T18:00:00Z"),
"end" : ISODate("2015-01-02T00:00:00Z"),
"lights_on" …Run Code Online (Sandbox Code Playgroud) mapreduce time-series mongodb mongodb-query aggregation-framework
我有这样的架构:
var CustomUserSchema = new Schema({
role: [],
permissions: [],
});
Run Code Online (Sandbox Code Playgroud)
permissions field存储一个如下所示的字符串数组:
["Delete", "Show","Create"]
Run Code Online (Sandbox Code Playgroud)
而
role field存储一个如下所示的对象数组:
[
{
name:"admin",
priority:10,
permissions: ["Delete", "Show" , "update"]
},
{
name:"user",
priority:5,
permissions: ["Delete", "Show"]
}
]
Run Code Online (Sandbox Code Playgroud)
现在,我的要求是能够存储"显示"为默认值permissions字段中架构和存储"用户"作为默认值角色名称字段,优先级0的内部的priority内role场"秀"的permissions内role领域.
试着自己,我想出了这个:
var CustomUserSchema = new Schema({
role: [{
name: {type: String, default: 'user'},
priority:{ type: Number, default: 0 } ,
permissions: [{type:String, default:'Show'}]
}],
permissions: [{type:String, default:'Show'}]
});
Run Code Online (Sandbox Code Playgroud)
但它根本没有为字段分配默认值,而是为字段提供大小为0的数组.
以上架构似乎有什么问题?如何将这些存储为默认值?
有没有办法在单个查询中列出每个集合的所有集合名称和文档计数?
我能找到的那个只给出了特定集合的计数.例如,如果Users是一个集合那么
db.Users.count()
Run Code Online (Sandbox Code Playgroud)
会给我计算集合中的文档数量Users.
在我的小型ExpressJS应用程序中,我有一个像这样定义的问题模型
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
/**
* Question Schema
*/
var Question = new Schema({
title: {
type: String,
default: '',
trim: true,
required: 'Title cannot be blank'
},
content: {
type: String,
default: '',
trim: true
},
created: {
type: Date,
default: Date.now
},
updated: {
type: Date,
default: Date.now
},
author: {
type: Schema.ObjectId,
ref: 'User',
require: true
},
answers : [{
type: Schema.ObjectId,
ref: 'Answer'
}]
});
module.exports = mongoose.model('Question', Question);
Run Code Online (Sandbox Code Playgroud)
我希望根据答案数量列出热门问题列表.我用来执行我的目的的查询
Question.find()
.sort({'answers.length': …Run Code Online (Sandbox Code Playgroud) 这是我的查询,
db.product.aggregate([
{ $match : {categoryID : 4 } },
{ "$group" : { "_id" : { "productID": "$productID",
"articleID": "$articleID", "colour":"$colour",
"set&size": { "sku" : "$skuID", "size" : "$size" },
},
}
},
{ "$group" : { "_id" : { "productID": "$_id.productID", "colour":"$_id.colour" },
"size": { "$addToSet" : { "sku" : "$_id.set&size.sku",
"size" : "$_id.set&size.size" }
},
}
},
{"$project":{
"_id":0,
"productID": "$_id.productID",
"colour":"$_id.colour",
"size":"$size",
}
},
]);
Run Code Online (Sandbox Code Playgroud)
通过在mongo shell上执行此查询,我得到了完美的输出.
产量
{
"_id": {
"productID": "PRD1523",
"colour": "GREEN"
}, …Run Code Online (Sandbox Code Playgroud) mongodb ×9
node.js ×3
mongoose ×2
arrays ×1
datetime ×1
java ×1
javascript ×1
mapreduce ×1
mongoexport ×1
python ×1
sorting ×1
time-series ×1