我有一个包含这样的文档的集合:
[
{
"user_id": 1,
"prefs": [
"item1",
"item2",
"item3",
"item4"
]
},
{
"user_id": 2,
"prefs": [
"item2",
"item5",
"item3"
]
},
{
"user_id": 3,
"prefs": [
"item4",
"item3",
"item7"
]
}
]
Run Code Online (Sandbox Code Playgroud)
我想要的是编写一个聚合,它将得到一个user_id列表,其中包含映射到列表中相同数量的所有用户prefs。例如,如果我运行聚合user_id = 1,我必须得到:
[
{
"user_id": 2,
"same": 1
},
{
"user_id": 3,
"same": 2
}
]
Run Code Online (Sandbox Code Playgroud) 有没有办法使用db.system.js.save(...)在管道或mapreduce中保存的用户定义函数?
我提供了产品的搜索功能,
用户可以通过多个标签进行搜索
例如,用户可以搜索"iphone,128G,usa"
如果搜索字词在标题中匹配,则会得到3分,
如果搜索字词在标记中匹配,则会得1分.
我怎么能重写我当前的查询来执行结果.
"title": "iphone 6 128G",
"tag": [
"usa",
"golden",
]
Run Code Online (Sandbox Code Playgroud)
"title": "iphone 4 64G",
"tag": [
"usa",
"golden",
]
Run Code Online (Sandbox Code Playgroud)
collection.aggregate(
{
"$match" => {
"tag":{ "$in"=> q_params },
}
},
{ "$unwind" => "$tag" },
{ "$match" => { "tag"=> { "$in"=> q_params } } },
{ "$group" => { "_id"=> {"title":"$title"},
"points"=> { "$sum"=>1 } } },
{ "$sort" => { "points"=> …Run Code Online (Sandbox Code Playgroud) 根据文件:
$ pull运算符从现有数组中删除与指定条件匹配的值的所有实例.
是否可以选择仅删除值的第一个实例?例如:
var array = ["bird","tiger","bird","horse"]
Run Code Online (Sandbox Code Playgroud)
如何在更新通话中直接删除第一个"鸟"?
在MongoDB聚合管道中,从一个阶段到另一个阶段的记录流发生一次/批次(或)将等待当前阶段完成整个集合,然后再将其传递到下一阶段?
例如,我有一个带有以下样本记录的集合classtest
{name: "Person1", marks: 20}
{name: "Person2", marks: 20}
{name: "Person1", marks: 20}
Run Code Online (Sandbox Code Playgroud)
我有大约100名学生的1000条记录,我有以下聚合查询
db.classtest.aggregate(
[
{$sort: {name: 1}},
{$group: {_id: '$name',
total: {$sum: '$marks'}}},
{$limit: 5}
])
Run Code Online (Sandbox Code Playgroud)
我有以下问题.
我的实际想法是对聚合结果进行分页.在上面的场景中,如果$ group维护排序顺序并仅处理所需的记录数,我想$match condition {$ge: 'lastPersonName'}在后续页面查询中应用.
我有以下架构的待售物品集合:
var itemSchema = new Schema({
"category" : { type : Schema.Types.ObjectId, ref : 'Category' },
"merchant" : { type : Schema.Types.ObjectId, ref : 'Merchant' },
"rating" : Number
})
Run Code Online (Sandbox Code Playgroud)
我继承了一个聚合查询,该查询返回与按类别划分的类别的项目,按商家分组,组按组中的最大评级排序:
Item.aggregate([
{ "$match" : { category : categoryId, merchant : { $ne : null }}},
{ "$group" : { _id : "$merchant",
rating : { $max : "$rating" },
items : { $push : "$$ROOT" }}},
{ "$sort" : { rating : -1 }}
], { allowDiskUse : true …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个聚合来计算有多少文档具有某些字段(即只有它们存在时才计算它们).对象看起来像这样:
{
"_id" : ObjectId("5617731fe65e0b19101c7039"),
"dateCreated" : ISODate("2015-10-09T07:56:15.068Z"),
"dateSent" : ISODate("2015-10-09T07:56:16.682Z"),
"dateAttempted" : ISODate("2015-10-09T07:56:16.682Z")
},
{
"_id" : ObjectId("561e37bb537d381bb0ef0ae2"),
"dateCreated" : ISODate("2015-10-14T11:08:43.306Z"),
"dateSent" : ISODate("2015-10-14T11:09:51.618Z"),
"dateAttempted" : ISODate("2015-10-14T11:09:51.618Z"),
"dateViewed" : ISODate("2015-10-15T10:09:50.618Z"),
"dateOpened" : ISODate("2015-10-15T10:10:01.618Z")
}
Run Code Online (Sandbox Code Playgroud)
我想迭代所有文档,计算字段存在的位置.期望的输出:
{
"total" : 1000,
"created" : 1000,
"sent" : 990,
"attempted" : 995
"viewed" : 800,
"opened" : 750
}
Run Code Online (Sandbox Code Playgroud)
如果此输出可以每天分组,则可获得奖励积分!我不希望为范围中的每个日期执行新的聚合.
这是我到目前为止所做的,但是没有用; 它为每个字段返回零
[
{
"$group": {
"_id": {
"$dayOfMonth": "$dateCreated"
},
"total": {
"$sum": 1
},
"sent": {
"$sum": "$dateSent"
},
"attempted": { …Run Code Online (Sandbox Code Playgroud) 我有一组假装付款的状态,每个都有付款ID.
我想获取每个付款ID的最新状态.测试我创建了一些虚拟数据然后尝试查询它.我到目前为止:
[Test]
public void GetPaymentLatestStatuses()
{
var client = new TestMongoClient();
var database = client.GetDatabase("payments");
var paymentRequestsCollection = database.GetCollection<BsonDocument>("paymentRequests");
var statusesCollection = database.GetCollection<BsonDocument>("statuses");
var payment = new BsonDocument { { "amount", RANDOM.Next(10) } };
paymentRequestsCollection.InsertOne(payment);
var paymentId = payment["_id"];
var receivedStatus = new BsonDocument
{
{ "payment", paymentId },
{ "code", "received" },
{ "date", DateTime.UtcNow }
};
var acceptedStatus = new BsonDocument
{
{ "payment", paymentId },
{ "code", "accepted" },
{ "date", DateTime.UtcNow.AddSeconds(-1) }
};
var completedStatus …Run Code Online (Sandbox Code Playgroud) c# mongodb mongodb-query aggregation-framework mongodb-.net-driver
我正在尝试创建一条路线来为我的应用程序注册用户,但遇到了问题。当点击/register路线时,我收到以下错误:
TypeError: user.setPassword is not a function at
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
模型/Users.js
var mongoose = require('mongoose');
var crypto = require('crypto');
var jwt = require('jsonwebtoken');
var UserSchema = new mongoose.Schema({
username: {type: String, lowercase: true, unique: true},
hash: String,
salt: String
});
UserSchema.methods.setPassword = function(password){
this.salt = crypto.randomBytes(16).toString('hex');
this.hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64).toString('hex');
};
UserSchema.methods.validPassword = function(password) {
var hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64).toString('hex');
return this.hash === hash;
};
UserSchema.methods.generateJWT = function() {
// set expiration to 60 days …Run Code Online (Sandbox Code Playgroud) 我是mongodb的新手,我有一个像这样的数据模型
{
last_updated: Date.now(),
csgo_items:[
{name: 'name', price: 1},
{name: 'name', price: 1},
{name: 'name', price: 1}
]
}
Run Code Online (Sandbox Code Playgroud)
我有一个“ last_updated”,然后有一个巨大的csgo物品清单。
我的问题是。我需要两个模式吗?一个是外层的两个属性,另一个是我的csgo项目模型的架构?
如果我这样做,我的模式将如何显示?
我有这样的项目架构。
var ItemSchema = new Schema({
price: Number,
name: String,
});
Run Code Online (Sandbox Code Playgroud)
我是否还需要另一个模式来为我的外部模式设置?
var CsgoSchema = new Schema({
last_updated: Date,
item: Array,
});
Run Code Online (Sandbox Code Playgroud)
它是否正确?