REF:来自具有字段值 max 的数组的 MongoDB 文档
查找文档中的子数组中的最高值和MongoDB查找文档数组中的最大值中的答案建议使用排序+限制(1),但这确实很慢。当然有一种方法可以使用 $max 运算符。
假设在聚合匹配中获得这样的文档:
{
_id: "notImportant",
array: [
{
name: "Peter",
age: 17
},
{
name: "Carl",
age: 21
},
{
name: "Ben",
age: 15
}
]
}
Run Code Online (Sandbox Code Playgroud)
您想要找到年龄最高的(整个,而不仅仅是一个值)文档。如何使用 $max 运算符做到这一点?
我试过
unwind {"$array"}
project {"_id": 0, "name": "$array.name", "age": "$array.age"}
Run Code Online (Sandbox Code Playgroud)
所以我得到
{
_id: null,
name: "Peter",
age: 17
}
{
_id: null,
name: "Carl",
age: 21
}
{
_id: null,
name: "Ben",
age: 15
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试匹配年龄:
age: {$eq: {$max: …Run Code Online (Sandbox Code Playgroud) 我必须在mongodb聚合pipiline中将毫秒转换为日期格式 -
我的疑问是 -
db.campaign_wallet.aggregate({"$match" : {"campaignId" : 1, "txnTime" : { "$gte" : 1429554600000, "$lte" : 1430159400000}}}, {"$group" : {"_id" : {"msisdn" : "$msisdn", "txnTime" : "$txnTime"}, "count" : {"$sum": 1}}});
Run Code Online (Sandbox Code Playgroud)
在此查询中如何将txnTime(以毫秒为单位)转换为管道中的日期?
我正在尝试向文档添加新字段,但这不起作用:
创建我的UserModel原型:
model = require("../models/user")
UserModel.prototype.findOneAndUpdate = function(query, params, cb) {
model.findOneAndUpdate(query, params, { returnNewDocument: true, new: true }, function(err, data) {
if (!err) {
cb(false, data);
} else {
cb(err, false);
}
});
};
Run Code Online (Sandbox Code Playgroud)
然后调用它
userFunc = require("../../model_functions/user")
userFunc.findOneAndUpdate({
"email.value": userEmail
}, {
$set: {"wat":"tf"}
},
function (err, updatedUser) {
//This logs the updated user just fine, but the new field
is missing
console.log(updatedUser);
...
}
);
Run Code Online (Sandbox Code Playgroud)
这会成功更新任何字段,只要它存在,但不会添加任何新字段.
一小时后如何从我的 mongo 数据库中删除项目?
我见过
db.Item.createIndex({ "createdAt": 1 }, { expireAfterSeconds: 3600 })
Run Code Online (Sandbox Code Playgroud)
抛出,但我如何在 nodejs 中实现它?
我的数据库条目看起来像这样
{
"_id": {
"$oid": "5b4b64bc8c6e8add083431a3"
},
"location": {
"lat": 59.924209956924315,
"lng": 10.70636168616943
},
"name": "Richard Middleton",
"address": "Espresso House",
"message": "sdsd",
"createdAt": {
"$date": "2018-07-15T15:14:04.573Z"
},
"updatedAt": {
"$date": "2018-07-15T15:14:04.573Z"
},
Run Code Online (Sandbox Code Playgroud)
我尝试在我的 db.Item.find() 之前为我的 get 请求运行它,但没有运气。
我有 3 个集合:
+-----------------+----------------------+------- ----------------+ | position_id | company_id | 职位名称 | +-----------------+----------------------+------- ----------------+ | 1 | 1 | 位置 1 | +-----------------+----------------------+------- ----------------+ | 2 | 2 | 位置 2 | +-----------------+----------------------+------- ----------------+
+-----------------+----------------------+------- ----------------+ | company_id | 行业_id | 公司名称 | +-----------------+----------------------+------- ----------------+ | 1 | 1 | 公司 1 | +-----------------+----------------------+------- ----------------+ | 2 | 2 | 公司 2 | +------------------------------------------------- ----------------+
+-----------------+----------------------+ | 行业_id | 行业名称 | +-----------------+----------------------+ | 1 | 行业1 | …
我有以下收藏
场地集合
{
"_id" : ObjectId("5acdb8f65ea63a27c1facf86"),
"name" : "ASA College - Manhattan Campus",
"addedBy" : ObjectId("5ac8ba3582c2345af70d4658"),
"reviews" : [
ObjectId("5acdb8f65ea63a27c1facf8b"),
ObjectId("5ad8288ccdd9241781dce698")
]
}
Run Code Online (Sandbox Code Playgroud)
评论集合
{
"_id" : ObjectId("5acdb8f65ea63a27c1facf8b"),
"createdAt" : ISODate("2018-04-07T12:31:49.503Z"),
"venue" : ObjectId("5acdb8f65ea63a27c1facf86"),
"author" : ObjectId("5ac8ba3582c2345af70d4658"),
"content" : "nice place",
"comments" : [
ObjectId("5ad87113882d445c5cbc92c8")
],
}
Run Code Online (Sandbox Code Playgroud)
评论收集
{
"_id" : ObjectId("5ad87113882d445c5cbc92c8"),
"author" : ObjectId("5ac8ba3582c2345af70d4658"),
"comment" : "dcfdsfdcfdsfdcfdsfdcfdsfdcfdsfdcfdsfdcfdsfdcfdsf",
"review" : ObjectId("5acdb8f65ea63a27c1facf8b"),
"__v" : 0
}
Run Code Online (Sandbox Code Playgroud)
作者集合
{
"_id" : ObjectId("5ac8ba3582c2345af70d4658"),
"firstName" : "Bruce",
"lastName" : "Wayne",
"email" : "bruce@linkites.com",
"followers" …Run Code Online (Sandbox Code Playgroud) mongoose mongodb node.js mongodb-query aggregation-framework
我对 Mongoose 和 MongoDB 本身相当陌生,我试图保存一堆通过 insertMany 方法插入的文档,但它没有保存文档。
这是我的代码:
模型:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var hostSchema = new Schema({
hostname: String,
timestamp: Number,
});
var hostModel = mongoose.model('host', hostSchema, 'host');
module.exports = hostModel;
Run Code Online (Sandbox Code Playgroud)
ExpressJS 邮政路线
var mongoose = require('mongoose');
var hostModel = require('../../models/Host');
router.post('/host', function (req, res, next) {
var payload = req.body;
(async function(){
var host = new hostModel();
const insertMany = await hostModel.insertMany(payload.data);
console.log(JSON.stringify(insertMany,'','\t'));
const saveMany = await hostModel.save();
res.status(200).send('Ok');
})();
});
Run Code Online (Sandbox Code Playgroud)
这console.log向我显示了记录,但是当我这样做时, …
我是 mongodb 的新手,所以我希望这不会成为一个非常基本的问题。我做了一些研究,并试图应用我所发现的东西,但有些东西似乎让我忽略了。
我有两个以下格式的集合:
-----------------------------------------------------------------------
Shop
-----------------------------------------------------------------------
{
"shopId": "1002",
"shopPosId": "10002",
"description": "some description"
}
-----------------------------------------------------------------------
Compte
-----------------------------------------------------------------------
{
"shopId": "9000",
"shopPosId": "0000",
"clientUid": "474192"
}
Run Code Online (Sandbox Code Playgroud)
我想加入这些,在这样做之前,我想过滤掉Shop没有该shopPosId字段的 s 。
这是我的代码:
Compte.aggregate([
{
$match:
{
$and:[{"clientUid":clientUid}]
}
},
{
$lookup:
{
from: "Shop",
localField: "shopId",
foreignField: "shopId",
let: {"Shop.shopPosId": "$shopPosId"},
pipeline: [{$match: {"shopPosId": {"$exists": false}}}],
as: "shopDescr"
}
}]
);
Run Code Online (Sandbox Code Playgroud)
返回的结果是 an undefined,这意味着查询没有多大意义(因为实际上我至少应该得到一个 void 数组)。
难道是因为两个集合都有字段shopPosId?(如果是这样,这条线不let: {"Shop.shopPosId": "$shopPosId"}应该处理它吗?)
{
"ArticleName": "Example Article",
"Comments": [
{
"Text": "Great Article",
"Responses": [
{
"Text": "No it isnt",
"Responses": [
{
"Text": "Yes it is"
}
]
},
{
"Text": "Spot on"
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
每次出现的关键"文本"都会被视为注释(因此有4条评论).在Mongo中,最好的方法是什么?
我是Mongo Db的新手,非常感谢您对此查询的一些帮助.在过去的几天里,我一直在筛选这些帖子,撕扯我的头发,看看我是否能找到与我的查询相关但没有运气的任何内容.
我有一个集合,文档结构类似于下面:
_id: xyz
Movieid: 123
MovieName: Titanic
ReleaseDate: 2000-01-01
_id: uvw
Movieid: 456
MovieName: Titanic II
ReleaseDate: 2018-01-01
_id: pqr
Movieid: 789
MovieName: Titanic III
ReleaseDate:
Run Code Online (Sandbox Code Playgroud)
我希望在3个单独的列中实现输出作为总电影,具有发布日期的电影和没有发布日期的电影的计数,如下所示:
Total | Released | UnReleased
3 | 2 | 1
Run Code Online (Sandbox Code Playgroud)
我能够编写单独的查询来执行计数,但我无法将所有这些成功整合到单个查询中.最终目标是创建一个视图,将这些计数作为输出.我已经尝试使用$和等运算符,但似乎无法使查询按预期工作....这是我得到的:
db.getCollection("Movies").aggregate(
$and: [
{
"$match" :
{"ReleaseDate":{$exists:true}}
}
,
{
$count:"Total"
},
{
"$match" :
{"ReleaseDate":{$exists:true,$nin:[""]}}
}
,
{
$count:"Released"
},
{
"$match" :
{"ReleaseDate":{$exists:true,$in:[""]}}
}
,
{
$count:"Unreleased"
}
]
);
Run Code Online (Sandbox Code Playgroud)