2017-11-08 1 views
0

Ich habe zwei Strings wieSuche nach einer größeren Zeichenfolge unter zwei Strings

  1. 59fc5478fb7dbd08703f2539
  2. 59fc54d3fb7dbd08703f253a

Was ich tue, ist eine einzigartige Chat-ID zwischen zwei Benutzern die Erstellung von Verkettung ihrer Benutzer-IDs
Aber das Problem ist id gebildet werden kann a + b oder b + a Ich versuche, eine Methode zu finden, so dass es die Zeichenfolge darstellt ein ist größer oder b so das Ergebnis ist immer eindeutige ID.
, was ich versucht: -

  1. localeCompare()
  2. lexikalischer Reihenfolge

    let a="59fc5478fb7dbd08703f2539"; 
    let b="59fc54d3fb7dbd08703f253a"; 
    if(a>b){ 
         let chatId=a+b; 
         }else{ 
          let chatId=b+a; 
          } 
    

chatId gebildet ist 59fc5478fb7dbd08703f253959fc54d3fb7dbd08703f253a

Wenn Werte a und b

let a="59fc54d3fb7dbd08703f253a"; 
let b="59fc5478fb7dbd08703f2539"; 
     if(a>b){ 
       let chatId=a+b; 
       }else{ 
        let chatId=b+a; 
        } 

chatId gebildet ist 59fc54d3fb7dbd08703f253a59fc5478fb7dbd08703f2539

Actual-Code verwendet

let newChat = new Chat(); 
    newChat.from = user._id; 
    newChat.towards = req.body.towards; 
    if (req.body.towards > user._id) { 
     newChat.chatId = req.body.towards + user._id; 
    } else { 
     newChat.chatId = user._id + req.body.towards; 
    } 
    newChat.message = req.body.message; 
    newChat.save((err) => { 

Ergebnis gespeichert sind

vertauscht

db.chats.find()

{ "_id" : ObjectId("5a034eeb16e42914fc3f9ff8"), "message" : "hi", "chatId" : "59fc54d3fb7dbd08703f253a59fc5478fb7dbd08703f2539", "towards" : ObjectId("59fc5478fb7dbd08703f2539"), "from" : ObjectId("59fc54d3fb7dbd08703f253a"), "time" : ISODate("2017-11-08T18:37:31.308Z"), "__v" : 0 } 
    { "_id" : ObjectId("5a034f3a16e42914fc3f9ff9"), "message" : "hello!", "chatId" : "59fc5478fb7dbd08703f253959fc54d3fb7dbd08703f253a", "towards" : ObjectId("59fc54d3fb7dbd08703f253a"), "from" : ObjectId("59fc5478fb7dbd08703f2539"), "time" : ISODate("2017-11-08T18:38:50.247Z"), "__v" : 0 } 

nach lexikalischer Reihenfolge sollte das Ergebnis eindeutig sein, aber sind immer zwei unterschiedliche Ergebnisse
Jede Hilfe großen Dank

+0

Woher kam 59fc5456fb7dbd08703f2538? – TurtlesAllTheWayDown

+0

@TurtlesAllTheWayDown es ist ein '_id' von Mungo – phpdroid

+0

Aber es ist weder a oder b.Sie verketten nur Strings, richtig? – TurtlesAllTheWayDown

Antwort

0

Da dies MongoDB-IDs sind, sind sie Hexadezimalzahlen. Sie könnten sie einfach als Zahlen vergleichen:

const a = '59fc5478fb7dbd08703f2539' 
const b = '59fc54d3fb7dbd08703f253a' 

const code = parseInt(a, 16) > parseInt(b, 16) ? a + b : b + a 

console.log(code) 
+0

arbeitete wie ein Charme! – phpdroid

0

Mit localeCompare() sollte das tun würde Trick hier (ohne den optionalen Locale-Parameter).

"a".localeCompare("b") wird einen negativen Index zurückgeben, wenn a zuerst kommt, ein positiver Index, wenn b zuerst kommt, und 0, wenn sie gleich sind.

Verwandte Themen