2016-04-21 4 views
2

Ich bin mit dem Problem der Klon der mongoose query Objekt konfrontiert. Javascript die Kopie der ein Objekt in ein anderes Objekt durch call-by-ref aber in meinem Projekt gibt es Szenario muss ich ein Objekt in ein anderes Objekt kopieren, indem call-by-value.Wie klonen die Mungo Frage Objekt in Javascript

var query=domain.User.find({ 
      deleted: false, 
      role: role 
     }) 

var query1=query; 

ich das Szenario Änderung der Query-Objekt haben nicht reflektiert wird in query1. Ich google und versuche so viele Möglichkeiten, um das Objekt zu klonen, aber es funktioniert nicht. Das Query-Objekt wird in einer anderen Funktion für die Paginierung verwendet und query1 Objekt wird für die Zählwertabfrage verwendet.

1.Ich zu Object.clone verwendet (query1) Fehler Object.clone Funktion ist nicht 2.I verwendet Object.assign (query1), aber es umfaßt nicht gut funktioniert. 3.I verwendet, um andere so viele Möglichkeiten, kann jemand mir helfen, dieses Problem zu sortieren

+0

Wenn Sie können, u lodash _.clone Methoden verwenden: https://lodash.com/docs#clo ne oder https://lodash.com/docs#cloneDeep – mimiz

+0

du hast gesagt object.assign (query1) ....... funktioniert nicht? Kannst du erwähnen, was damit passiert ist? – GvSharma

+0

@ gvsharma Änderung Abfrage1 spiegelt in diesem Fall in Abfragevariable. –

Antwort

2

Sie versuchen, einen Cursor zu klonen, aber es ist nicht der richtige Ansatz, müssen Sie wahrscheinlich nur eine andere wie diese

erstellen :

var buildQuery = function() { 
    return domain.User.find({ 
    deleted: false, 
    role: role 
    }); 
}; 

var query = buildQuery(); 
var query1 = buildQuery(); 
+0

Danke, es wird mir helfen..aber wenn Sie einen anderen alternativen Weg haben, wäre das effizienter. –

1

Alternative Lösung merge Methode:

const query = domain.User.find({ 
    deleted: false, 
    role: role 
}).skip(10).limit(10) 

const countQuery = query.model.find().merge(query).skip(0).limit(0) 

const [users, count] = await Promise.all([query, countQuery.count()])