2016-04-21 39 views
2

我正面臨着克隆mongoose query對象的問題。 Javascript副本中的一個對象,將其call-by-ref但在我的項目的另一個對象有情況,我需要通過call-by-value.如何在javascript中克隆貓鼬查詢對象

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

var query1=query; 

一個對象複製到另一個對象我在查詢對象的情況下更改不會反映在query1。我谷歌和嘗試這麼多的方式克隆對象,但它沒有工作。查詢對象用於另一個功能的分頁和query1對象用於計數查詢。用於Object.clone

1.I(QUERY1)錯誤Object.clone不函數中使用Object.assign(QUERY1) 2.I但它簡化版,工作正常。 3.I使用其他很多方面任何人可以幫助我理清這個問題

+0

如果可以,U可以使用lodash _.clone方法:https://lodash.com/docs#clo ne或https://lodash.com/docs#cloneDeep – mimiz

+0

你說Object.assign(query1).......不工作?你能提一下發生了什麼事嗎? – GvSharma

+0

@gvsharma在這種情況下更改查詢1反映在查詢變量中。 –

回答

2

你想克隆一個光標,但它不是正確的方法,你可能只需要創建另一個

這樣:

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

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

謝謝它會幫助我......但如果你有其他一些更有效的替代方法。 –

1
使用 merge方法

替代解決方案:

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()])