我是 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"}应该处理它吗?)
我有一个包含许多对象的json数据.我想限制分页数据,我需要总项数.请帮忙.
Model.find().skip((pageNumber-1)*limit).limit(limit).exec()
Run Code Online (Sandbox Code Playgroud)
我想要计数和跳过数据作为回应.
我有两个集合:
学生
{
_id: ObjectId("657..."),
name:'abc'
},
{
_id: ObjectId("593..."),
name:'xyz'
}
Run Code Online (Sandbox Code Playgroud)
图书馆
{
_id: ObjectId("987..."),
book_name:'book1',
issued_to: [
{
student: ObjectId("657...")
},
{
student: ObjectId("658...")
}
]
},
{
_id: ObjectId("898..."),
book_name:'book2',
issued_to: [
{
student: ObjectId("593...")
},
{
student: ObjectId("594...")
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个 Join to Student集合,该集合存在于Library集合的对象字段的issue_to数组中。
我想对学生收藏进行查询以获取学生数据以及图书馆收藏,如果学生存在或不存在,它将检查issued_to数组,否则获取图书馆文档。我试过 $lookup of mongo 3.6 但我没有成功。
db.student.aggregate([{$match:{_id: ObjectId("593...")}}, $lookup: {from: 'library', let: {stu_id:'$_id'}, pipeline:[$match:{$expr: {$and:[{"$hotlist.clientEngagement": "$$stu_id"]}}]}])
Run Code Online (Sandbox Code Playgroud)
但它会引发错误,请在这方面帮助我。我还查看了在 stackoverflow 上提出的其他问题,例如。上计算器问题, 对问题2计算器但这些comapring简单字段不是对象的数组。请帮我
我有以下架构。
{
posts: [
{
_id: '5ayuunbdsyuuuyut778'
replies: [{
_id: "67hfudj7e9whduu888",
text: "something"
}]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想更新文字,特别是回复。我正在使用猫鼬。
我已将查询编写如下
Post.findOneAndUpdate(
{'posts.replies._id': _id},
{$set: {'posts.$[post].replies.$[reply].text': "something1"}},
{ arrayFilters: [{'post._id': postId}, { 'reply._id': _id }]}
)
Run Code Online (Sandbox Code Playgroud)
此查询未更新文档。
我错过了什么吗?我是否需要使用 ObjectId 来转换 ids
我在 mongodb 中很新,现在我需要计算一个 $lookup 字段,这可能吗?
我有这样的事情:
result = await company.aggregate([
{
$lookup: {
from: 'userFocus',
localField: '_id',
foreignField: 'value',
as: 'focusUsers'
}
},
{
$project:{
name: 1,
focusUsers: {userId: 1}
}
}
])
Run Code Online (Sandbox Code Playgroud)
结果如下所示:
[
{_id: 'xxxx', name: 'first company', focusUsers: [user1, user2, user3...]},
{_id: 'yyyy', name: 'second company', focusUsers: []},
{_id: 'zzzz', name: 'third company', focusUsers: []}
]
Run Code Online (Sandbox Code Playgroud)
现在我想要一个额外的列显示 focusUsers 计数,换句话说,我想要一个如下所示的结果:
[
{_id: 'xxxx', name: 'first company', focusUsers: [user1, user2, user3], focusCount: 3},
{_id: 'yyyy', name: 'second company', focusUsers: …Run Code Online (Sandbox Code Playgroud) 我怎样才能在 mongo 中反向填充。我有 2 个架构
用户:
var user_scheme = new mongoose.Schema({
name:String,
age:Number,
roles:{
type:mongoose.Schema.Types.ObjectId,
ref:'Role'
}
});
Run Code Online (Sandbox Code Playgroud)
角色:
var role_scheme = new mongoose.Schema({
name:String,
});
Run Code Online (Sandbox Code Playgroud)
文件:
///user
{
"_id" : ObjectId("5bf9a19b01ce3e19b440aed8"),
"name" : "user1",
"age" : 22,
"roles" : ObjectId("5c0242621ab7b677e6b2e01e"),
"__v" : 0
}
///role
{
"_id" : ObjectId("5c0242621ab7b677e6b2e01e"),
"name" : "Admin"
}
Run Code Online (Sandbox Code Playgroud)
代码:
User.find().populate('roles').exec(function (err, data) {
res.json(data);
})
Run Code Online (Sandbox Code Playgroud)
在这里我可以在用户下获得角色,但是我如何在每个角色下获得用户。
mongoose mongodb node.js mongodb-query aggregation-framework
我想知道MongoDB$和$$MongoDB之间有什么区别。
例如:
'$sum': {
'$map': {
'input': '$data',
'as': 'currentData',
'in': { '$size': '$$currentData.d' }
}
}
Run Code Online (Sandbox Code Playgroud)
如果我将使用$而不是$$in 呢$$currentData.d?
这是查询
[
{
"$project": {
"formattedDate": {
"$dateToString": { "format": "%Y-%m-%d", "date": "$ceatedAt" }
},
"createdAtMonth": { "$month": "$ceatedAt" },
"rating": 1
}
},
{
"$group": {
"_id": "$formattedDate",
"average": { "$avg": "$rating" },
"month": { "$first": "$createdAtMonth" },
}
}
]
Run Code Online (Sandbox Code Playgroud)
我需要时间戳中的日期.怎么做?
我的 mongoDB 集合中有如下数据。我想在今天的基础上计算总数或search_term。
_id:ObjectId("5b7e1d38981cdc1a7c8bb5fc")
search_term:"Baiyoke Boutique"
date:"August 23rd 2018, 9:34:32 am"
_id:ObjectId("5b7e1fa8fa27fd2754080ad9")
search_term:"Baiyoke Boutique"
date:"August 23rd 2018, 9:44:56 am"
_id:ObjectId("5b7e28314d2d0f388c1596cd")
search_term:"Baiyoke Florting Market"
date:"August 23rd 2018, 10:21:21 am"
Run Code Online (Sandbox Code Playgroud)
我试过以下查询。我已经使用了时刻。我不是我犯了什么错误。
var start = moment().startOf('day');
var end = moment().endOf('day');
history.find({
date: {
$gte: start,
$lt: end
}
}).count().toArray(
function (e, res) {
if (e) callback(e)
else callback(null, res)
});
Run Code Online (Sandbox Code Playgroud) 我是 MongoDB 的新手,所以我不确定我是否正确地表达了我的问题。
我有一个集合,其中的数据如下所示:
{
"_id" : ObjectId("66666"),
"Id" : 994,
"PostType" : 1,
"AnswerId" : 334,
"CreationDate" : ISODate("1994-09-05T09:34:36.177+0000"),
"Tags" : "test",
"Parent" : null,
}
{
"_id" : ObjectId("8888"),
"Id" : 334,
"PostTypeId" : 2,
"AnswerId" : NaN,
"CreationDate" : ISODate("20005-08-03T11:29:42.880+0000"),
"ParentId" : 994
}
Run Code Online (Sandbox Code Playgroud)
两个文档都在同一个集合中,我尝试使用 PostType:1 文档中的 AnswerId,并使用该值作为主 ID 来提取其 CreationDate。
这是我试图实现的逻辑,但它似乎不起作用:
db.collection.aggregate([
{$project:{_id:"$Id", Title:"$Title", Answerid:"$AnswerId", QuestionDate:"$CreationDate"}},
{$match:{Id:"$Answerid"}},
{$project:{AnswerDate:"$CreationDate"}}
])
Run Code Online (Sandbox Code Playgroud)
我愿意接受任何建议。
mongodb mongo-shell mongodb-query nosql-aggregation aggregation-framework