我想在JavaScript中将ObjectID(Mongodb)转换为String.当我从一个对象形式MongoDB.它就像一个对象有:timestamp,second,inc,machine.我无法转换为字符串.
我知道MongoDB的理论以及不支持连接的事实,并且我应该尽可能地使用嵌入文档或非规范化,但是这里是:
我有多个文件,例如:
例:
Users:
{ _id: 1, first_name: 'Bill', last_name: 'Gates', suburb: 1 }
{ _id: 2, first_name: 'Steve', last_name: 'Jobs', suburb: 3 }
Suburb:
{ _id: 1, name: 'Suburb A', state: 1 }
{ _id: 2, name: 'Suburb B', state: 1 }
{ _id: 3, name: 'Suburb C', state: 3 }
State:
{ _id: 1, name: 'LA' }
{ _id: 3, name: 'NY' }
Child:
{ _id: 1, _user_id: 1, first_name: 'Little Billy', last_name: 'Gates' } …Run Code Online (Sandbox Code Playgroud) 我有兴趣优化我正在使用MongoDB的"分页"解决方案.我的问题很直接.我通常会限制使用该limit()功能返回的文档数量.这迫使我发出一个没有该limit()函数的冗余查询,以便我也可以捕获查询中的文档总数,这样我就可以将其传递给客户端,让他们知道他们必须发出额外的请求.检索其余文件.
有没有办法将其压缩为1个查询?获取文档总数但同时仅使用limit()?检索子集?是否有不同的方式来思考这个问题,而不是接近它?
pagination mongodb casbah mongodb-query aggregation-framework
有没有办法使用mongodb shell使用自定义格式将字符串转换为日期
我想转换"21/May/2012:16:35:33 -0400"到目前为止,
有没有办法通过DateFormatter或某事
Date.parse(...)或ISODate(....)方法?
是否有一个我可以在聚合函数中使用的运算符来获取字符串而不是ObjectId作为响应?
db.something.aggregate([ {$match: {'property': {$exists:true}} }, {$project: {stringId: '$_id.???'}}])
Run Code Online (Sandbox Code Playgroud) 无法使用this.refs获取输入类型的值...如何从输入类型获取值
export class BusinessDetailsForm extends Component {
submitForm(data) {
console.log(this.refs.googleInput.value)
}
}
reder() {
return(
<form onSubmit={this.submitForm}>
<Field type="text"
name="location"
component={GoogleAutoComplete}
id="addressSearchBoxField"
ref="googleInput"
/>
</form>
)
}
}
Run Code Online (Sandbox Code Playgroud) 我现在正处于这种情况:我有一个集合X:
{
_id:ObjectId('56edbb4d5f084a51131dd4c6'),
userRef:ObjectId('56edbb4d5f084a51131dd4c6'),
serialNumber:'A123123',
...
}
Run Code Online (Sandbox Code Playgroud)
我需要聚合所有文档,用userRef + serialNumber对它们进行分组,所以我试图像这样使用concat:
$group: {
_id: {
'$concat': ['$userRef','-','$serialNumber']
},
...
Run Code Online (Sandbox Code Playgroud)
所以基本上在我在MongoDB中的聚合中,我需要通过ObjectId和字符串的串联来分组文档.但是,似乎$ concat只接受字符串作为参数:
uncaught exception: aggregate failed: {
"errmsg" : "exception: $concat only supports strings, not OID",
"code" : 16702,
"ok" : 0
}
Run Code Online (Sandbox Code Playgroud)
有没有办法将ObjectId转换为聚合表达式中的String?
编辑:
这个问题是相关的,但我的解决方案不适合我的问题.(特别是因为我在聚合期间不能使用ObjectId.toString())
实际上我在Mongo的文档中找不到任何ObjectId().toString()操作,但我想知道在这种情况下是否有任何棘手的事情可以做.
我有一个看起来大致如下的Mongodb架构:
[
{
"name" : "name1",
"instances" : [
{
"value" : 1,
"date" : ISODate("2015-03-04T00:00:00.000Z")
},
{
"value" : 2,
"date" : ISODate("2015-04-01T00:00:00.000Z")
},
{
"value" : 2.5,
"date" : ISODate("2015-03-05T00:00:00.000Z")
},
...
]
},
{
"name" : "name2",
"instances" : [
...
]
}
]
Run Code Online (Sandbox Code Playgroud)
其中每个元素的实例数量可能非常大.
我有时想只得到一个数据样本,也就是说,获取每个第三个实例,或每第10个实例......你得到了图片.
我可以通过获取所有实例并在我的服务器代码中过滤它们来实现这一目标,但我想知道是否有办法通过使用一些聚合查询来实现.
有任何想法吗?
更新
假设数据结构是扁平的,如下面的@SylvainLeroux所示,那就是:
[
{"name": "name1", "value": 1, "date": ISODate("2015-03-04T00:00:00.000Z")},
{"name": "name2", "value": 5, "date": ISODate("2015-04-04T00:00:00.000Z")},
{"name": "name1", "value": 2, "date": ISODate("2015-04-01T00:00:00.000Z")},
{"name": "name1", "value": 2.5, "date": ISODate("2015-03-05T00:00:00.000Z")},
...
] …Run Code Online (Sandbox Code Playgroud) 例如:在DB中,我的字符串值就像"cell phones".如果我"cellphones"从前端得到字符串值.如何将其与DB字符串进行比较并获取相关的字符串值作为响应.
我们在MongoDB中使用unix时间戳存储了一个日期,如何在查询时获取日期?有没有办法以ISODate格式显示时间戳?