我有像下面这样的 MongoDB 文档:是否有查询以 subscribedGroups 的长度对文档进行排序?可以是升序或降序。
{
"_id" : ObjectId("58c29d9ec79d585c0e16b110"),
"subscribedGroups" : [
ObjectId("5b28a9190c8c0d0014b03a0c"),
ObjectId("5b2930650b813a0014a3294d"),
ObjectId("5b29f1b5243d470014d6d351")
]
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在猫鼬函数中添加两个值。
这是我使用的函数:
Equipa.findOne({ '_id': req.params.equipaID }, function (error, equipa) {
if (error) {
return (error);
}
if (util.isNullOrUndefined(equipa)) {
return res.status(204).end()
}
console.log(equipa.distanciaTotal + "------" + req.body.distanciaPercorrida),
{ total : {$add[equipa.distanciaTotal,req.body.distanciaPercorrida]}},
console.log(total)
});
Run Code Online (Sandbox Code Playgroud)
equipa.distanciaTotal和中的值req.body.distanciaPercorrida是正确的,Equipa由 找到的值也是正确的Equipa.findOne。
我认为更新文档会很好,但我根本无法添加这两个值。
我已将数据与收藏夹分组,并已推入数组。我想使用对象键对数组进行排序,例如姓名、电子邮件或年龄。
{
$group:
{
_id: "$favourite",
favourite: { $first: "$favourite" },
data: {
$push: {
"name": "$name",
"email": "$email",
"age": "$age"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用下面的代码,但它不起作用。
{ "$sort": { "data.name": 1 } }
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?
mongoose mongodb node.js mongodb-query aggregation-framework
我有一个 Mongo 集合,如下所示:
[{
id: 1,
timestamp: 1534488870841,
type: 'deposit'
}, {
id: 1,
timestamp: 1534488915119,
type: 'deposit'
}]
Run Code Online (Sandbox Code Playgroud)
如何查询以列出deposit按月份分组的所有交易。
必须使用timestamp属性(UNIX 毫秒)计算月份。
我可以按如下方式获得存款,但我不确定如何分组:
db.getCollection('transactions').find(
{"type":"deposit"});
Run Code Online (Sandbox Code Playgroud)
编辑:Mongo 3.4 版
我正在查询3个我想排除_id在输出中所有位置的集合之间
我的输出是:
{
"_id" : ObjectId("5b6aed5f9bcdb5d4ae64aef5"),
"userID" : "1",
"skills" : [
{
"_id" : ObjectId("5b766b5f1365a4940bb6050f"),
"skillID" : "javaid",
"skillname" : "????",
"languageID" : "hindiid"
},
{
"_id" : ObjectId("5b766b8c1365a4940bb60535"),
"skillID" : "pythonid",
"skillname" : "?????",
"languageID" : "hindiid"
}
],
"gender" : {
"_id" : ObjectId("5b7687cd2a2329043e2383d5"),
"genderID" : "femaleid",
"gendername" : "?????",
"languageID" : "hindiid"
}
}
Run Code Online (Sandbox Code Playgroud)
查询:
db.User.aggregate([
{ "$match": { "userID":"1" }},
{ "$lookup":{
"from": "Skill",
"pipeline": [
{ "$match": { "languageID": "hindiid", "skillID": { …Run Code Online (Sandbox Code Playgroud) 有两个集合:
销售量
{
"_id" : ObjectId("5ba0bfb8d1acdc0de716e839"),
"invoiceNumber" : 1,
"saleDate" : ISODate("2018-09-01T00:00:00.000Z"),
"totalTaxAmount" : 613,
"subTotalAmount" : 2000,
"totalAmount" : 2613,
"balance" : 2613,
"financialYear" : "2018-2019",
"modeOfPayment" : "Digital Transfer",
"customerName": "Acme Inc"
}
Run Code Online (Sandbox Code Playgroud)
交易
{
"_id" : ObjectId("5bbb4e131fb8af0dc645212d"),
"transactionNumber" : 1
"transactionDate" : ISODate("2018-09-03T00:00:00.000Z"),
"transactionType" : "Income",
"partyName" : "Acme Inc",
"transactionMode" : "Digital Transfer",
"amount" : 2613,
"paidItems" : [
{
"orderId" : "5b90a7d62bb5a21be4ff97e3",
"invoiceNumber" : "1",
"orderType" : "sale",
"totalAmount" : 2613,
"balance" : 613,
"payingAmount" …Run Code Online (Sandbox Code Playgroud) 我有商店集合和用户集合,其中包含商店 id 列表作为字符串。
店铺文件示例:
{
"_id" : ObjectId("5a0c6797fd3eb67969316ce2"),
"picture" : "http://placehold.it/150x150",
"name" : "Genmom",
"email" : "leilaware@genmom.com",
"city" : "Rabat",
"location" : {
"type" : "Point",
"coordinates" : [
-6.79387,
33.83957
]
}
}
Run Code Online (Sandbox Code Playgroud)
用户集合示例:
{
"_id" : ObjectId("5c04b943ff491824b806686a"),
"email" : "ayoub.khial@gmail.com",
"password" : "$2a$10$4Wt5Rn6udxREdXCIt3hGb.sKhKUKOlyiYKmLTjYG3SqEPKFSw9phq",
"likedShops" : [
"5a0c6797fd3eb67969316ce2",
"5c07ada8ff49183284e509d1",
"5c07acc1ff49183284e509d0"
],
"dislikedShops" : [ ]
}
Run Code Online (Sandbox Code Playgroud)
我想返回喜欢的商店的详细信息。
所以我有两个ObjectId位于不同集合中的 s,我希望将其合并为输出。所以这就像使用$lookup没有任何本地字段的函数一样。如果没有聚合,我可以简单地执行两个操作.findOne,但这需要两次 API 调用(这将创建两个连接)。有可能一并实现吗?
因此,如果没有聚合,它看起来就像这样:
let main_document =
db.findOne({
_id: ObjectId(first)
})
let subdocument =
db.findOne({
_id: ObjectId(second)
})
main_document.subdocument = subdocument
return main_document
Run Code Online (Sandbox Code Playgroud) javascript mongoose mongodb mongodb-query aggregation-framework
我正在创建一个购物应用程序。每个用户都有钱包。结构如下:
{
"userName" : "Gandalf the Grey",
"wallet" : 100,
"orderHistory" : []
}
Run Code Online (Sandbox Code Playgroud)
假设该用户购买了 50 件的商品。有没有更好的方法而不是用 findOne 获取其钱包值,然后进行减法并更新新的钱包值?现在,我正在通过两种不同的操作来实现它,看起来像
dbo.collection('users').findOne({'userName': controller.userName})
.then(function(doc) {
updateWallet(doc);
}
Run Code Online (Sandbox Code Playgroud)
然后
let newWalletBalance = doc.wallet - product.cost;
dbo.collection('users').updateOne(
{'userName':controller.userName},
{ $set: {wallet: newWalletBalance } }
);
Run Code Online (Sandbox Code Playgroud)
是否有可能将它们合而为一?
对于MongoDB,当$lookup用于查询多个集合时,是否可以获取在$lookup?中返回的字段的仅值列表?
我不想要的是完整对象及其所有键/值的列表。
资料:
failover_tool:PRIMARY> db.foo.find().pretty()
{
"_id" : ObjectId("5ce72e415267960532b8df09"),
"name" : "foo1",
"desc" : "first foo"
}
{
"_id" : ObjectId("5ce72e4a5267960532b8df0a"),
"name" : "foo2",
"desc" : "second foo"
}
failover_tool:PRIMARY> db.bar.find().pretty()
{
"_id" : ObjectId("5ce72e0c5267960532b8df06"),
"name" : "bar1",
"foo" : "foo1"
}
{
"_id" : ObjectId("5ce72e165267960532b8df07"),
"name" : "bar2",
"foo" : "foo1"
}
{
"_id" : ObjectId("5ce72e1d5267960532b8df08"),
"name" : "bar3",
"foo" : "foo2"
}
Run Code Online (Sandbox Code Playgroud)
所需查询输出
{
"_id" : ObjectId("5ce72e415267960532b8df09"),
"name" : "foo1",
"desc" : "first …Run Code Online (Sandbox Code Playgroud)