【问题标题】:OrderBy in mongo db to get some thing like thisOrder By in mongodb 得到这样的东西
【发布时间】:2016-11-22 10:35:08
【问题描述】:

我对 mongodb 很陌生。请帮我解决这个问题。

以下是 mongo db 中的文档:

{name : sass, city : banga}, 
{name : pass, city : banga}, 
{name : kanga, city : runga}, 
{name : jass, city : canga}, 
{name : dass, city : tunga}

我想查询城市为“banga”,因此结果数组应该首先包含城市为“banga”的文档,然后是所有其他文档。

谢谢。

【问题讨论】:

标签: mongodb


【解决方案1】:

请试试这个。下面的查询将在顶部为您提供“banga”以及之后的所有其他文档。

注意:-

请注意,查询不会按城市对数据进行排序。它只是返回顶部的“banga”文档。 "city" 不等于 "banga" 的文档可以按任何顺序排列。

查询:-

您可能需要在以下查询中相应地更改集合名称。

db.collection.aggregate([
{ $project: {_id : 1, "name": 1, "city" : 1, 
    isRequiredCity: { $cond: { if: { $eq: [ "$city", "banga" ] }, then: 0, else: 1 } }} },
{$sort : {"isRequiredCity" : 1} }    
]);

输出:-

/* 1 */
{
    "_id" : ObjectId("58342ccaba41f1f22e600c67"),
    "name" : "sass",
    "city" : "banga",
    "isRequiredCity" : 0
}

/* 2 */
{
    "_id" : ObjectId("58342ccaba41f1f22e600c6a"),
    "name" : "pass",
    "city" : "banga",
    "isRequiredCity" : 0
}

/* 3 */
{
    "_id" : ObjectId("58342ccaba41f1f22e600c68"),
    "name" : "kanga",
    "city" : "runga",
    "isRequiredCity" : 1
}

/* 4 */
{
    "_id" : ObjectId("58342ccaba41f1f22e600c69"),
    "name" : "jass",
    "city" : "canga",
    "isRequiredCity" : 1
}

/* 5 */
{
    "_id" : ObjectId("58342ccaba41f1f22e600c6b"),
    "name" : "dass",
    "city" : "tunga",
    "isRequiredCity" : 1
}

【讨论】:

  • 谢谢。解决了!
【解决方案2】:

一个选项是为所有文档添加一个特定的字段。新字段将通过唯一值标识所有包含 city : banga 的文档。 比您可以根据该值订购所有集合。

例如,让我们将唯一字段和唯一值添加到所有集合中:

db.collection.update({'city':'banga'}, {$set:{"value":10}}, {upsert:false, multi:true});
db.collection.update({'city': { $ne: 'banga'}}, {$set:{"value":1}}, {upsert:false, multi:true});

现在,每个字段为 'city'=='banga' 的文档都有 value = 10,每个文档的字段为 'city'!=' banga'value = 1

现在您可以使用 value 字段对集合中的文档进行排序。

db.collection.find({}).sort({'value': -1})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多